我的Access数据库里包含了ole字段
如何利用delphi6对ole字段内存储的文件进行读写
我用的是OleContainer,但是失败!
帮帮忙!

解决方案 »

  1.   

    //Load Paper
    procedure TfrmResPaper.dgMainDblClick(Sender: TObject);
    var
        Query:TADOQuery;
        Stream:TADOBlobStream;
    begin
      inherited;
      if not ((DMResPaper.State=dsBrowse) and (DMResPaper.RecordCount>0))  then Exit;  dgMain.Enabled:=False;
      Panel1.Enabled:=False;
      Query:=TADOQuery.Create(nil);
      with Query do
      begin
          Connection:=Pubconn;
          SQL.Clear;
          SQL.Add('SELECT ID,RES_NO,PAPER FROM B_PAPER WHERE ID='''+DMResPaper.FieldByName('ID').AsString+''''
                  +' AND RES_NO='''+DMResPaper.FieldByName('RES_NO').AsString+''' AND PAPER IS NOT NULL');
          Open;
          if RecordCount=0 then
              OlePaper.DestroyObject
          else
          begin
              Stream:=TADOBlobStream.Create(TBlobField(FieldByName('PAPER')),bmRead);
              try
                  OlePaper.LoadFromStream(Stream);
              finally
                  Stream.Free;
              end;
          end;
          Query.Free;
      end;
      dgMain.Enabled:=True;
      Panel1.Enabled:=True;
      EpsDLG('圖紙載入完畢。');
    end;//Save Paper
    procedure TfrmResPaper.bbnSavePaperClick(Sender: TObject);
    var
        Query:TADOQuery;
        Stream:TADOBlobStream;
    begin
        if not ((OlePaper.State=osLoaded) and
            (DMResPaper.State=dsBrowse) and (DMResPaper.RecordCount>0))  then Exit;
        Query:=TADOQuery.Create(nil);
        with Query do
        begin
            Connection:=Pubconn;
            SQL.Clear;
            SQL.Add('SELECT ID,RES_NO,PAPER FROM B_PAPER WHERE ID='''+DMResPaper.FieldByName('ID').AsString+''''
                    +' AND RES_NO='''+DMResPaper.FieldByName('RES_NO').AsString+'''');
            Open;
            Edit;
            Stream:=TADOBlobStream.Create(TBlobField(FieldByName('PAPER')),bmReadWrite);
            try
                try
                    OlePaper.SaveToStream(Stream);
                finally
                    Stream.Free;
                end;
                Post;
                EpsDLG('圖紙保存成功!');
            except
                EpsDLG('圖紙保存失敗!');
            end;
            Query.Free;
        end;end;
      

  2.   

    var
        Query:TADOQuery;
        Stream:TADOBlobStream;
    但是 LoadFromStream();的参数属性应该是:TStream;