大侠们:
怎样把Access库中ole对象字段中的二进制文件读取出来拷贝到硬盘上?
怎样用程序把文件存放在Access库中ole对象字段中
怎样把Access库中ole对象字段中的二进制文件读取出来拷贝到硬盘上?
怎样用程序把文件存放在Access库中ole对象字段中
解决方案 »
- 散分7
- delphi如何调用网页上的一个控件,
- 请问如果在access库文件中设置了密码,要在ADOConnecting控件上如何加上密码?
- 如何在视图里加入一个不存在的是否字段
- 简单的记录编辑问题,今天又有30分了.
- 自动关机函数
- 还是那个限制输入数字的问题!
- 在delphi中如何连接sql server数据库,有何注意事项?
- 我的程序在win98下调用的RASAPI32.dll中的拨号函数拨号,一切正常!而在win2000下却出错提示:找不到RASAPI32.DLL?????
- 哪位有DXShow控制摄像头的例程啊,给发个,万分感谢
- 一个相当头痛的问题
- 关于Realplayer 10控件的问题............
本方案的不同之处,在于数据入库前先进行格式的转换。格式的转换是通过OLE控件完成的。即,先创建OLE对象,然后入库。示例代码如下:
AOleContainer.CreateObjectFromFile(aFileName);
AoleContainer.SaveToFile(tmpFileName);
AblobField.LoadFromfile(tmpFileName);
这样作的好处是,由于库中直接存储的是OLE格式,所以,在库与OLE控件之间的数据传递将非常方便。在这种情况下,可以通过文件直接传递:数据字段先将数据存到一个临时文件中,然后,OLE控件从临时文件中读取。即:
AblobField.SaveToFile(aFileName);
AOleContainer.LoadFromFile(aFileName);
另外,还可以通过内存流来完成。使用内存流,可减少磁盘操作,大大提高运行效率。即:
AblobField.SaveToStream(aStream);
AOleContainer.LoadFromStream(aStream);
var
fn: string;
begin
ADOTable1.Edit;
if OpenDialog1.Execute then begin //打开文件
fn := ExtractFileName(OpenDialog1.FileName);
ADOTable1DocuID.AsString := fn;
OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, False); //创建OLE对象
OleContainer1.SaveToFile('tmp'); //将OLE数据存入临时文件
ADOTable1DocuContent.LoadFromFile('tmp'); //将OLE数据存入数据库
ADOTable1.UpdateRecord;
end;
end;
---------------------------------------
procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
begin
if not ADOTable1DocuContent.IsNull then begin
ADOTable1DocuContent.SaveToFile('tmp'); //数据存入临时文件
OleContainer1.LoadFromFile('tmp'); //从临时文件中读取OLE对象
end;
end;
ADOTable1: TADOTable;
ADOTable1DocuID: TWideStringField;
ADOTable1DocuContent: TBlobField;
OleContainer1: TOleContainer;
.......
我是这样做的
首先手工把Excel文件放在ole对象字段中
然后用TBlobfield(datamodule1.ADOQ_tiku.fieldbyname('source')).SaveToFile('d:\excel.xls');
结果打开文件后发现是乱码??
怎样才能改进??