delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
从SQL数据库中读取文件出错,急,在线等? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222113003166.html
各位大侠:  
                我已经在SQL数据库中有一个字段存放了EXCEL文件,为Image类型,现在通过存储过程取得数据,但想打开取出的EXCEL文件时出错,我的代码如下:  
    var  
          Estream:TadoBlobStream;  
   
          ClientDataSet1.close;  
          ClientDataSet1.command:='Exec   存储过程名   ';  
          ClientDataSet1.open;  
     
          Estream:=TadoBlobStream.Create((ClientDataSet1.FieldByName('t_excel')       as   TBlobField),bmRead);  
          Estream.SaveToFile('c:\123.xls');  
          Estream.free;  
   
        但是运行时出错:'Invalid   class   typecast'  
   
        请各位帮忙!谢谢!  
         
           
   
   
   
 

用十六进制编辑器对比一下文件装入前后的文件头是不是一样。  
  然后找原因。

给你一份资料,也许有用。  
  SQL   Server和Delphi中有一个讨厌的地方就是,存储任意二进制文件的时候,比较烦人,例如把一个Word文件(25KB)保存到SQL   Server中,但是等你重新提出保存成另外的文件的时候,可能生成的文件大小只有24.7KB左右大小了!这样Word就不能打开重新生成的文件!  
   
  要解决这个问题,要做几个修改:  
  首先,你必须修改SQL   Server中用来保存任意文件的字段的类型为Image(不要用Text/nText字段,更加不要用Binary/VarBinary字段,因为binary字段最多只能存储8K的数据)数据类型,然后,你在Word里面添加字段的时候,Delphi会默认字段类型为ftMemo,你必须把这个字段改成ftBlob字段!以后你就可以通过  
  Table1FileField.LoadFromFile()/SaveToFile()来读取任意的二进制文件了!而且不会丢失任何字节!也不会多出什么东西来!这是Kingron的经验之谈。

不用Stream,直接保存到数据库和读出后保存到文件吧  
  保存:  
          TBlobField(cdsERFiles.FieldByName('FileContent')).LoadFromFile(OpenDialog.FileName);  
   
  读出:  
          TBlobField(cdsERFiles.FieldByName('FileContent')).SaveToFile(sFileName);  
 

问题已经解决,谢谢各位!结贴,给分

posted on 2008-12-11 10:09 delphi2007 阅读(353) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。