如何在ole控件中使用Tstream或TBlobStream?(100分)

  • 主题发起人 主题发起人 RocLee
  • 开始时间 开始时间
R

RocLee

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在ole控件中使用Tstream或TBlobStream,实现数据库中BLOB字段与ole Object的数据关联.
 
不知你想怎么用,ole端是什么程序。
 
AutoCad R14
另:AutoCad R14用Ole打开好象不能打开或另存为文件,
模板也不能选,请各位大侠指教.
画一些电力方面的图形,用什么较好.
有没有显示Autocad R14 *.dwg 的控件?
多谢大家了!
 
如果你的电力方面的图形不是很复杂的话,可是用一下Microsoft Drawing
(Word5.0下);否则,用OLE的嵌入对象来进行。本人是将Drawing嵌入OLE中,
作为绘图部分。根据OLE的工作原理,它也可嵌入AcadCAD的应用程序。至于存
取TBlob,可参见本人的有关问题,“茶叶蛋”描述的较详细,本人不再重复。
 
存入:
dm.QueryQuestionPic.ParambyName( 'Pic' ).ASBlob := Stream.Datastring;

读出:
Stream.DataString := TBlobField( Query1.FieldByName( 'blob' ) );

新学到的方法。这里Stream是TStringStream类型。
用Table等等的方法实际上是一样的。关于OLE字段的讨论,去Ole版看看吧? :-)
 
补充:上面的Stream虽然是TStringStream,但对二进制一样用。
我亲手送入了许多图像。
 
Stream.Datastring 是只读属性。
Stream.DataString := TBlobField( Query1.FieldByName( 'blob' ) ); 好象不能用!!!
 
Hi, 茶叶蛋
顺便提个个人问题,如何将TBlobField的内容从QReport上反映出来,
最好能给个简单的算法和实例。我用的是Table数据库!多谢指点!!!
 
>Stream.Datastring 是只读属性。
> Stream.DataString := TBlobField( Query1.FieldByName( 'blob' ) ); 好象不能用!!!


对啊,多谢jjazz,这条语句的确不能用。对不起了。

下面这条能用。
TBlobField( Query.fieldbyname('ole') ).SaveToStream( OleStream );

OleStream 是TMemoryStream类型。
 
这是我做的一个程序的片段,实现显示table中存放的ole对象
procedure TLogonForm.Table1DataChange(Sender: TObject; Field: TField);
Var stream : TMemoryStream;
rc : TRect;
begin
If Not Table1.Active Then Exit;
If ( Table1.State = dsInsert ) Then
Begin
OleContainer1.DestroyObject;
OleContainer1.Refresh;
Exit;
end;

If Not ( Table1.State In [ dsBrowse, dsEdit, dsSetKey ] ) Then Exit;
stream := TMemoryStream.Create;
try
Table1.FieldByName('MEMO').SaveToStream( stream );

stream.Seek( 0, 0 );
OleContainer1.LoadFromStream( stream );
Finally
stream.Free;
End;
OleContainer1.Refresh;
end;
 
差不多了吧,到此为止
 
后退
顶部