我的老板让我把我的程序由用SQL SERVER改为用ORACLE
在修改的时候我想用个TABLE控件打开一个有多个BLOB字段的表出现了‘缺少表达式’的错误,
我当时是用BDE直接连接ORACLE的。后来我改用ODBC连接这个错误就解决了。
可是在读写BOLB的时候就会出现‘Invalid BOLB handle in record buffer ’的错误。
var
  AStream: TMemoryStream;
  ABlob:TBlobField;
begin
  AStream := TMemoryStream.Create;
  ABlob:= Table1.FieldByName('data') as TBlobField;
  ABlob.SaveToStream(AStream);
  
//////////////////////////////////////
  ABlob.Dataset.Edit;
  AStream.Position := 0;
  ABlob.LoadFromStream(AStream);
这该如何解决,请大家帮忙。
这个问题我发过一贴了,可是没有解决,只好再发一贴。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    {}var
      MS: TMemoryStream;
    begin
      RichEdit1.Font.Color := Clred;
      MS:=TMemoryStream.create;
      RichEdit1.Lines.LoadFromStream(MS);
      MS.Position:=0;
      ADOQuery1.Append;
      TBlobField(ADOQuery1.FieldbyName
        ('Doc')).LoadFromStream(MS);
      ADOQuery1.Post;
    end;  }  with ADOQuery1 do
      begin
        Edit;
        FieldByName('doc').AsString := RichEdit1.Text;
        Post;
      end;      function blobcontenttostring(const filename: string):string;
      begin
        with tfilestream.create(filename,fmopenread) do
          try
           setlength(Result,size);
           read(Pointer(Result)^,size);
         finally
           free;
         end;
      end;
    //保存字段
    var
      sFileName : String;
    begin
      RichEdit1.Font.Color := ClRed;
      RichEdit1.Lines.SaveToFile('C:\aaa.rtf');
      if (opendialog1.execute) then
      begin
        sFileName:=OpenDialog1.FileName;
        adoquery1.edit;
        adoquery1.fieldbyname('doc').asstring:=Blobcontenttostring(sFileName);
        adoquery1.post;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      MS: TStream;
    begin
      ADOQuery1.First;
      with ADOQuery1 do
       MS:=CreateBlobStream
        (FieldbyName('Doc'),bmRead);
        RichEdit2.Lines.LoadFromStream(MS);
      MS.Free;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      ADOQuery1.Next;
    end;