天天看點

OleContainer操作Excel以二進制方式讀寫資料庫

需求源頭:

OleContainer操作Excel,想把Excel以二進制方式存入資料庫,并且以二進制方式讀取

存入流:

Procedure SaveToStream(ADOTable1: TAdoTable)

var

  vStream: TMemoryStream;

begin

 try

   try

    vStream := TMemoryStream.Create;

    vStream.Clear;

    OleContainer1.SaveToStream(vStream);

    vStream.Position := 0;

    ADOTable1.Append;

    TBlobField(ADOTable1.FieldByName("BlobField")).LoadFromStream(vStream);

    ADOTable1.Post; 

   finally

      FreeAndNil(vStream);

   end;

  except

    exit;

  end;

end;

讀取流:

procedure LoadFromStream(ADOTable1: TAdoTable)

  //注意:這裡要用TADOBlobStream,如果用TMemoryStream等流類,則會出現錯誤 

  //OleContainer的二進制流格式和Access的二進制流格式不同

  //TADOBlobStream是專門用來Access的流轉化的,TADOBlobStream繼承自TMemoryStream

  vStream: TADOBlobStream;

  try   

    vStream := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName("BlobField")), bmread);

    if (OleContainer1.State = osOpen) or (OleContainer1.State = osUIActive) then

    begin

      OleContainer1.DestroyObject;

    end;

    Olecontainer1.LoadFromStream(vStream);

問題總結:

注意流格式的問題。