各位大侠:
我已经在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数据库中有一个字段存放了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的经验之谈。
保存:
TBlobField(cdsERFiles.FieldByName('FileContent')).LoadFromFile(OpenDialog.FileName);读出:
TBlobField(cdsERFiles.FieldByName('FileContent')).SaveToFile(sFileName);