大侠们:
   怎样把Access库中ole对象字段中的二进制文件读取出来拷贝到硬盘上?
  怎样用程序把文件存放在Access库中ole对象字段中

解决方案 »

  1.   

    在库中以OLE格式保存/读写数据。具体方法如下:
      本方案的不同之处,在于数据入库前先进行格式的转换。格式的转换是通过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);
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    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;
      

  3.   

    记得加上
    ADOTable1: TADOTable;
    ADOTable1DocuID: TWideStringField;
    ADOTable1DocuContent: TBlobField;
    OleContainer1: TOleContainer;
    .......
      

  4.   

    大侠:
      我是这样做的
       首先手工把Excel文件放在ole对象字段中
      然后用TBlobfield(datamodule1.ADOQ_tiku.fieldbyname('source')).SaveToFile('d:\excel.xls');
     结果打开文件后发现是乱码??
     怎样才能改进??