我想实现如下的功能
先把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里的数据
各位帮忙顶顶!