急!大侠们,帮忙查查错呀!使用ClientDataSet向数据库保存文件。

wangwenliang 2005-03-04 05:00:39
我使用下面的代码向数据库中保存文件,不提示出错,但读出的文件temp2.htm为1字节,temp1.htm为5k
数据库为sqlserver,保存文件的content字段类型为image;
大家帮帮给看看什麽原因呀!

这些代码是社区中的一位叫 minercxy(Codewhy) 的朋友写的。

Dm_Client.Q_TmpOpen.Edit;
Filetodatabase(DM_Client.Q_TmpOpen,'g:\temp1.htm','content');
Dm_Client.Q_TmpOpen.post;
//Dm_Client.Q_TmpOpen.ApplyUpdates(0);
mstr:='select tmid,aqx,linkaddr,content from '+CurrentDb+' where tmxh='''+m_tmxh+'''';
ExecCommSql(mstr,DM_Client.Q_TmpOpen,'OPEN');
databasetoFile(DM_Client.Q_TmpOpen,'g:\temp2.htm','content');

procedure filetodatabase(clientdataset:Tclientdataset;filename,fieldname:string);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
mfilename:string;
begin
myfile:=Tfilestream.Create(filename,fmopenread);
memsize:=myfile.Size;
inc(memsize);
buffer:=allocmem(memsize);
stream:=Tblobstream(clientdataset.CreateBlobStream(clientdataset.FieldByName(fieldname),bmWrite));
try
Stream.Seek(0, soFromBeginning);
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;

end;
procedure databasetofile(clientdataset:Tclientdataset;filename,fieldname:string);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TblobStream;
begin
myfile:=Tfilestream.Create(filename,fmcreate);
stream:=Tblobstream(clientdataset.CreateBlobStream(clientdataset.FieldByName(fieldname),bmread));
memsize:=stream.Size;
inc(memsize);
buffer:=allocmem(memsize);
try
Stream.Seek(0, soFromBeginning);
stream.Read(buffer^,memsize);
Myfile.Write(buffer^,memsize);
finally
MyFile.Free;
Stream.Free;
end;
end;
...全文
140 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neo40 2005-03-05
  • 打赏
  • 举报
回复
Tclientdataset是多层分布式的客户端控件,你得连接服务器端的TDataSetProvider ,而且与TDataSetProvider连接的TADOQuery控件的ACTIVE属性必须为FALSE。

确认了这些以后把字段类型改为text型。
caiso 2005-03-05
  • 打赏
  • 举报
回复
顶一下
wangwenliang 2005-03-05
  • 打赏
  • 举报
回复
着急呀!谁能帮解决此问题,我一定想法在增加200分
wangwenliang 2005-03-05
  • 打赏
  • 举报
回复
Tclientdataset是多层分布式的客户端控件,你得连接服务器端的TDataSetProvider ,而且与TDataSetProvider连接的TADOQuery控件的ACTIVE属性必须为FALSE。

这些我都设了,不行呀!
保存文件应用image,不是text类型吧,相同的代码,
我用TAdotable,TAdoquery的话都可以正常保存没有问题的。

wangwenliang 2005-03-04
  • 打赏
  • 举报
回复
自己顶一下,大家帮忙呀!先谢谢啦!
minercxy(Codewhy)在吗?
78hgdong 2005-03-04
  • 打赏
  • 举报
回复
先顶,

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧