急!大侠们,帮忙查查错呀!使用ClientDataSet向数据库保存文件。
我使用下面的代码向数据库中保存文件,不提示出错,但读出的文件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;