我用Tgraphic.field(adodataset1.fieldbyname('blob')).loadfromfile('c:\1.bmp');
   tgraphic.field(adodataset1.fieldbyname('blob')).saveasfile('c:\2.bmp');
结果1.bmp和2.bmp文件大小一样但2.bmp就是大不开而且通过记事本打开看它们的ascii码一样,2.bmp就是大不开.
  我看了delphi ado的书说,在adodb.pas中有一个错误,我改了adodb.pas但不知怎么编译.
   还有请各位大虾帮我看看我想开发c/s架构的程序,adodataset1的
coursorlocation用client-side coursor还是 server-side coursor好

解决方案 »

  1.   


    用OLE代碼如下:(樓主本人的)//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;//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;
        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;
    end;
    以上是成功代碼
      

  2.   

    我在此貼有作回答http://expert.csdn.net/Expert/topic/2483/2483251.xml?temp=.4362451