怎么用ADOQuery, ADOTable 读写oracle大字段?我在使用的时候报“数据类型不支持”。

解决方案 »

  1.   

    注意区分sql语句字段的大小写。
      

  2.   


    用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;
    參考
    http://expert.csdn.net/Expert/topic/2483/2483251.xml?temp=.4762842
      

  3.   

    使用TBlobField,TADOBlobStream等对象实现。