有关ClientDataSet从数据库中读取二进制文件的问题!各位大侠路过了进来看看,分多多! (100分)

  • 主题发起人 赤脚医生
  • 开始时间

赤脚医生

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现如下的功能
先把ClientDataSet中的数据通过流的方式写到数据库中。
用到时可能从数据库中取出相应的数据赋给ClientDataSet
以下实现数据的写
procedure TfrmView.N34Click(Sender: TObject);
var
Stream:TStream;
begin
myadoQuery.Edit;
Stream:=myadoQuery.CreateBlobStream(myadoQuery.FieldByName('colInfo'),bmwrite);
try
Stream.Position :=0;
tmpClientDS.SaveToStream(Stream,dfBinary);
finally
Stream.Free;
end;
myadoQuery.FieldByName('sqls').AsString:=memView.Text;
myadoQuery.Post;
end;
以下用于读
procedure TfrmView.getSql(tblname,id:string);
var
tmpStream:TStream;
begin
if myadoQuery<>nil then myadoQuery.Close;
sqls:='select * from '+ tblname+ ' where id=' +ID;
myadoQuery:=query(sqls);
tmpClientDS.CreateDataSet;
tmpClientDS.open;
tmpStream := myadoQuery.CreateBlobStream(myadoQuery.FieldByName('colinfo'),bmreadwrite);
try
tmpClientDS.LoadFromStream(tmpStream);
finally
tmpStream.Free;
end;
可以通过tmpStream 读取文件但文件不完整,比写入时要小很多。ClientDataSet不能还原以前的数据。
请问问题出在哪里,是读时出错了,还是ClientDataSet里的数据不能进行这样的写入数据库的操作。
因为我尝试了,tmpClientDS.SaveToStream(Stream,dfBinary);不写入数据库直接再从流Stream(tmpclientds.LoadFromStream(stream))中可以还原ClientDataSet里的数据
各位帮忙顶顶!

 
写的时候先提交在释放管用吗?
读的直接TmpCLientDS.LoadFromStream是加载到哪里去?不明白。
 
试试:
try
tmpStream.Position :=0; //加上这句
tmpClientDS.LoadFromStream(tmpStream);
finally
tmpStream.Free;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
828
SUNSTONE的Delphi笔记
S
I
回复
0
查看
724
import
I
顶部