我使用下面的代码向数据库中保存文件,不提示出错,但读出的文件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;  

解决方案 »

  1.   

    自己顶一下,大家帮忙呀!先谢谢啦!
    minercxy(Codewhy)在吗?
      

  2.   

    Tclientdataset是多层分布式的客户端控件,你得连接服务器端的TDataSetProvider ,而且与TDataSetProvider连接的TADOQuery控件的ACTIVE属性必须为FALSE。确认了这些以后把字段类型改为text型。
      

  3.   

    Tclientdataset是多层分布式的客户端控件,你得连接服务器端的TDataSetProvider ,而且与TDataSetProvider连接的TADOQuery控件的ACTIVE属性必须为FALSE。这些我都设了,不行呀!
    保存文件应用image,不是text类型吧,相同的代码,
    我用TAdotable,TAdoquery的话都可以正常保存没有问题的。