我的程序如下:
var
  AStream: TMemoryStream;
  ABlob:TBlobField;
begin
  AStream := TMemoryStream.Create;
  ABlob.SaveToStream(AStream);
  
//////////////////////////////////////
  ABlob.Dataset.Edit;
  AStream.Position := 0;
  ABlob.LoadFromStream(AStream);
当执行BLOB字段读写时出现:Invalid BOLB handle in record buffer 的错误。
请大家帮忙!先谢了!

解决方案 »

  1.   

    1,你的ABlob没有初始化,应该这样写
    比如你要操作的blob字段名为'data',对应的Table为AdoTable1,如下:
    var
      AStream: TMemoryStream; 
      ABlob: TBlobField;
    begin
      ABlob:= AdoTable1.FieldByName('data') as TBlobField;
      略...
    end;
      

  2.   

    用的时候也可以不用定义TBlobField,直接用如
    (AdoTable1.FieldByName('data') as TBlobField).SaveToStream(AStream);
      

  3.   

    AStream := TMemoryStream.Create(TBlobField(TreeAdo.FieldByName('data')), bmRead);
    AStream.Seek(0, soFromBeginning);
    ABlob.LoadFromStream(AStream);
      

  4.   

    读BLOB字段有一个更简单的方法:
    var
      s:string;
      i:integer;
      buffer:array [1..1024] of char;
    begin
      ...
      ...
      FillChar(buffer,sizeof(buffer),0);
      s:=AdoTable1.FieldByName('BlobField').AsString;
      for i:=1 to Length(s) do
        buffer[i]:=s[i];
      

  5.   

    TO: duduwolf
    对不起,我忘了把ABlob:= AdoTable1.FieldByName('data') as TBlobField;写出来,在我的程序是有这句的。
    TO: ALL
    多谢大家帮忙。可好像都偏题了。我把我的问题详细的说一遍吧!
    我的老板让我把我的程序由用SQL SERVER改为用ORACLE
    在修改的时候我想用个TABLE控件打开一个有多个BLOB字段的表出现了‘缺少表达式’的错误,
    我当时是用BDE直接连接ORACLE的。后来我改用ODBC连接这个错误就解决了。
    可是在读写BOLB的时候就会出现‘Invalid BOLB handle in record buffer ’的错误。
    这该如何解决,请大家再帮我找找原因。谢谢了!
      

  6.   

    你试一下ado吧!我想可能与多个blob字段有关的
      

  7.   

    转帖:
    写入Blob字段的方法
    读出、写入借助stream。
    写入:
    var 
    ms:tmemorystream;
    begin
      ms:=TmemoryStream.Create;
      ms.Loadfromfile(“1.jpg”);
     if ms.size>0 then
     begin
       ms.position:=0;
       (Clientdateste1.fieldbyname('dipicture') as Tblobfield).loadfromstream(ms);
     end ;
    end;读出:
     var 
      ms:tstream;
      myjpg:tjpegImage;
    begin
      ms:=clientdataset1.createblobstream(clientdataset1.fieldbyname('dipicture'),bmread);
    if ms.size>0 then
    begin
      ms.position:=0;
      myJpg:=tjpegimage.create;
      myJpg.loadFromstream(ms);
      Image1.Picture.assign(myjpg);//在Image1中显示出来
    end;
    end;
      

  8.   

    BDE有BUG,如果打开一张表(记录数大于300条),在第一条记录中读取BLOB可以,但直接定位到最后一条后再读取就会出现你说的错误。用ADO就没有。