为什么blob字段存时没有错误,取时没有东西?答者有分(50分)

  • 主题发起人 主题发起人 笑他
  • 开始时间 开始时间

笑他

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库sql2000
ado连接

存储时无错误,但是提取不出数据

存取时代码如下:

FMemo.Clear;
DMPact.adoTpl.Edit;
DMPact.adoTplPACTBLOB.Clear;
try
FWriters:=TWriter.Create(FMemo,1024);
FWriters.WriteListBegin;
for i:=0 to ControlCount - 1 do
WriteObj(Controls); //填写FMemo的过程,跟踪时执行
FWriters.WriteListEnd;
DMPact.adoTplPACTBLOB.LoadFromStream(FMemo);
saveDB(DMPact.adoTpl);
finally
FreeAndNil(FWriters);
end;
except
FreeAndNil(FMemo);
end;


提取代码如下:
try
DMPact.adoTplPACTBLOB.SaveToStream(FMemo);
if FMemo.Size>0 then
ReadObj; //读取FMemo的过程
except
FMemo.Clear;
FreeAndNil(FMemo);
end;
end;

其中:FMemo 为TMemoryStream,FReader 为 Readers ,FWriter 为 Writers

答者有分。
 
没人响应,分少了?
 
用计算字段读取
 
是不是要设置缓存增大点,bde有这个问题。没用过ado
 
你不能把变量声明贴出来?猜得头痛。
 
to abc_xp:用计算字段怎么读取?
to ugvanxk:怎样设置缓存?
to 远帆:感谢你研究此问题,现我把代码简单整理以下:
var
FMemo:TMemoryStream;
FReaders:TReader;
FWriters:TWriter;

//读取过程:adoTplPACTBLOB 为一blob字段
if not adoTplPACTBLOB.isNull then
begin
adoTplPACTBLOB.SaveToStream(FMemo);
FMemo.Position:=0;
FReaders:=TReader.Create(FMemo,1024);
FReaders.ReadListBegin;
while not FReaders.EndOfList do
//.... Read something
FReaders.ReadlistEnd;

end
//存储过程 adoTpl :含blob字段的表
FWriters:=TWriter.Create(FMemo,1024);
FWriters.WriteListBegin;
//..Writer something; //填写FMemo的过程,跟踪时执行
FWriters.WriteListEnd;
adoTpl.edit;
adoTplPACTBLOB.LoadFromStream(FMemo);
adoTpl.post;




 
>adoTplPACTBLOB.SaveToStream(FMemo);
这时FMemo尚未创建。
 
我没有用过TReader和TWriter,不过我猜想应该是这样:
FReaders:=TReader.Create(FMemo,1024);
adoTplPACTBLOB.SaveToStream(FMemo);
FMemo.Position:=0;
你先试试,不行再说。
 
FMemo必须先创建。没有存到数据库中。你在数据库里看看字段有没有值。
 
感谢大家的回答,FMemo是对象变量,窗体create时创建。
不过,问题已经解决,blob字段的loadfromStream总是不起作用,我用loadFromFile解决的。
散分了。
 
多人接受答案了。
 
后退
顶部