使用TBlobField遇到的问题(100分)

  • 主题发起人 主题发起人 Jams
  • 开始时间 开始时间
J

Jams

Unregistered / Unconfirmed
GUEST, unregistred user!
继本人在上一个帖子后,私下里熟悉各位提供的办法,又遇到一个问题。
在‘茶叶蛋’提供的事例中有:
TBlobField.LoadFromStream()
的过程,但本人键入该指令后,系统包错说认识改过程。
我查看Help,Help中对应于TBlobField的各个过程和函数清晰可见,没有人为
输入的错误;其次,在Unit单元中依照Help加入DB单元,但仍无济于事,重装
了几遍Delphi 3.0 (本人的机器为PII233, 若选全装Delphi3.0系统,运行时
则死机;只能分解装入;但单位的P166全装则不会出现死机现象),故障依旧,
连单位的也没有TBlobField.LoadFromStream()等的过程和函数,这说明不是
Delphi3.0的装入缺损,这是为什么?如何处置?你们('茶叶蛋')和书上为什么
能使用,莫名其妙!
还有,我若对TBlobField字段进行读取操作,使用TStream能否实现?即:

Var
BlobStream: TBlobStream;
OleStream: TMemoryStream;
Begin
BlobStream := TBlobStream.Create(TBlobField(Table1.Fields[1]),
bmRead);
OleStream := TMemoryStream;

TBlobField.SaveToStream(OleStream);

....
OleStream.Free;
BlobStream.Free
End;

错误的话,该如何实现?
用TReader、TWriter吗?若是,操作步骤如何?算法如何?
还有,TReader、Twriter在使用时其作用是缓存与TStream间的数据交换,
问题1:该缓存是指针类型的吗?还是PChar?还是其它?
问题2:TBlobStream与TOleStream间能否通过缓存进行数据交换?若行,算法
如何?实现步骤如何?

问题提的不少!望各位Delphi专家能给予较详细的说明、举例。在此多谢各位
的帮助,包括‘茶叶蛋’。
当然在下不会忘了各位!!!:-)
 
Jams,您好!
我在那个例子里头是这样写的:
TBlobField( fieldbyname('ole') ).LoadFromStream( OleStream );
(此处是把query的'ole'字段作为TBlobField来操作)
而不是: TBlobField.LoadFromStream(...)
(此处是改写TBlobField类的 LoadFromStream的方法了)

我的程序是在Delphi4下写的,但是这种方法在Delphi3下应该能实现
现在我的程序赶着交货,还有一个小问题没解决,正在拼命写程序,
你的别的问题我只能看一看,实在没有精力解决了,等我写完程序,再来交流.
我的问题就是,word把文档转存为html文件后,并不关闭html文件,而我用关闭
wordBasic对象的方法不能起作用,那位大虾要知道办法的话,告诉我一声. *_*
嘻嘻,正在疯狂编程中,偷偷出来玩一玩. :-)
 
上次我写的程序都是从我的活中copy出来的,我已经试过n次了,能用!
 
给你发了一份关于TStream的文章,请查收.
 
书上的事例也是写:
TBlobField.LoadFromStream();之类的语句;
但不知为何我键入TBlobField.后Deiphi自动提示的过程和函数没有
LoadFromStream()、SaveToStream()之类的函数或过程,不知是何原故?
 
茶叶蛋!
现在上网的人已不向出来匝道,估计我在此的时间亦不多久,我的意思对于你这
个‘老虫子’来说已经是再明白不过的了,估计待你做完再关照,恐怕就不好联
系了,希望能藉此机会多交流一下。
 
>书上的事例也是写:
>TBlobField.LoadFromStream();之类的语句;
>但不知为何我键入TBlobField.后Deiphi自动提示的过程和函数没有
>LoadFromStream()、SaveToStream()之类的函数或过程,不知是何原故?

书上如何写的我不明白,虽然LoadFromStream是TBlobField的方法,
但是您在程序里面写出来它就只代表一个类,用CodeInside只能显示出其
作为一个类的通用方法,而不是作为TBlobField的方法.

您应该声明一个TBlobField的对象,在过程中对其CodeInside,然后您就能看到
LoadFromStream等方法了.

另外,......您的第一段话里头:
OleStream := TMemoryStream; 应该是:OleStream:=TMemoryStream.create
顺眼看见的.嘻嘻.

有空帮我看一下那个word与html的问题,我这边因为这个问题而彻底停下来了!

ps: 对不起,上午老师在这里看进度,没法及时响应您.
 
好久不见Jims了,真想念啊(是想分啦,嘻嘻 *_* )
 
茶叶蛋:
你或其它的“虾”们能把TReader, TWriter的描述个明白,并给出操作实例该
问题即告结束,你(们)的期盼也会实现。
本人现在来此并不易,Hacker不到别人的Login,机会当然少了!这事我已暗里提了
多此,看样子不点破窗户纸"虾"们是不明白的。
至此,望“虾”们快快做答,赶过这个项目,有时间再去“黑”它一些,那时再详聊。
 
TReader & TWriter是用来序列化对象的类,DELPHI的序列化功能比VC++要强的多,
但一般情况下它们是在内部使用的,除非做很特殊的东西才会用到,一般用
TComponent.ReadComponent & TComponent.WriteComponent就足够了.
 
还有其它的见解吗?
 
Hi, zhaoyipeng
是否可将Ole下的TReader和TWriter的使用,功能说明一下,最好能举个事例,
拜托!
 
hi,jams:
我是Rainymoon。我也注意到咱们俩的课题很相似,也想与你
交流。但我上网机会不多(cernet网络速度无法忍受),如与你
讨论什么问题可能回复会慢些。
我的邮箱:rainymoon@263.net.
希望能听到你的回音。
 
茶叶蛋:
关于Stream的文章发给我一份,Email: z_cd@263.net
谢谢
 
TBlob中的OleContainer内容如何反应在Quick Report上,操作方法如何?

 
Stream的操作在PASCAL阶段就没有什么问题了嘛...

试试这样:

var
oleStream: TMemoryStream;
BlobStream: TBlobStream;
begin
if not AField.isBlob then Exit;
BlobStream := ADataset.CreateBlobStream(AField, bmRead);
oleStream := TMemoryStream.Create;
try
oleStream.CopyFrom(BlobStream, 0);
......//处理oleStream
finally
BlobStream.Free;
oleStream.Free;
end;
end;
 
以下为写操作:
procedure TForm1.Button1Click(Sender: TObject);
var bs:tblobstream;
begin
table1.insert; // or edit
bs:=tblobstream.create(table1.fieldbyname('b1') as tblobfield,bmwrite);
try
memo1.Lines.savetostream(bs);
finally
bs.free;
table1.Post;
end;
end;

以下为读操作:
procedure TForm1.Button2Click(Sender: TObject);
var bs:tblobstream;
begin
bs:=tblobstream.create(table1.fieldbyname('b1') as tblobfield,bmread);
try
memo1.Lines.loadfromstream(bs);
finally
bs.free;
end;

end;
 
在Quick Report中也是这样使用吗?请详细说明。
 
为何无人作答?难道就无高手能解决TBlob在报表中的问题了吗?
 
旧瓶新酒!
关于TBlob和Ole之间的关系在诸位的提示与教诲下,本人终于能够运用自如了,并
以功分别进行了奖赏,还许诸位再接再厉继续予以耐心细致地教导!
对于这个问题我也曾与CJ君、wangkun君、menxin君进行过辩论,他们也给了本人
一些好的方法,虽说与当前的项目有点差距,但对今后的编程还是有用的,Thinks.
这个问题还是TBlob的问题。诸位可能会说,该问题(TBlob)不是已经解决了吗?怎么
还.....这个问题牵扯到TBlob字段,所以....!
请听我细说,本人利用OleContainer1进行内容的录入,使用的是Windows下的写字
板,本人在写字板上录有文字、公式和图形(用Microsoft Drawing产生的),将这些
信息没有存在文件中,而是直接记录到数据库的TBlob字段中,正因为如此,所以百
十条记录就达到100多MB.这一阶段本人已经学会,关键的是,现在我想将这个TBlob
字段的内容(非图像文件、非文档文件)调入Word中。诸位在此也提供了不少的意见和
建议,单写入Word中的都是String类型,不是我要的Blob字段中的内容!
诸位给我的Word8等文件,我都看了,虽说是D4,但大概也知道一二,都是String的
操作。我用的是D3,但写入Word的String过程,本人也终于能够完成了。可别忘了,
我处理的数据不是String, 而是TBlob字段的内容,所以在此重提该问题,以兹诸位
能给予指点,最好能有一事例并进行必要的注释!要求较为苛刻,网上交流毕竟不
是面对面地指点,所以还许诸位费神!
版主和各路“小”班主能否发表一下你们的建议呢!(你们有不少的杰作,想必编程
的经验和体会不少吧!个人的见解也较丰富吧?!)咱们之间交流的不是很畅,望能
听听你们的意见!
 
后退
顶部