问题如下:
====================================================================
procedure AProc;
var
  Sql: string;
  BField: TBlobField;
  Strm: TBlobStream;
  RC: TARecord; // 是一种记录类型,他的字段都是简单类型
begin
  //---先给RC的各字段赋值 如下:
   RC.F1 := ...;
   RC.F2 := ...;
   RC.F3 := ...;
   ...
  //---然后
  Sql := 'SELECT ABLOBFIELD FROM ATABLE';
  Query.SQL.Text := Sql;
  Query.RequestLive := True;
  Query.Open;
  Query.Append;
  BField := TBlobField(Query.FieldByName('ABLOBFIELD'));
  Strm := Query.CreateBlobStream(BField,bmReadWrite) as TBlobStream;
  Strm.Seek(0,soFromBeginning);
  Strm.Write(RC,Sizeof(RC));
  Query.Post; 
  // “致命”的错误在上面句被执行后报出:
  //  'General SQL error ORA-22990:LOB定位器无法扩展事务处理'
end;
====================================================================
  有哪位大虾可以来指点一下迷经吗? Thnx in advance!!!
====================================================================

解决方案 »

  1.   

    事实上,如果Oracle中的这个ATABLE表的字段ABLOBFIELD被定义成LONG ROW类型,则同样的程序就不会出错。可问题是我一定要用BLOB类型。 怎么办~~~~~~~ 郁闷啊~~~~~~~~~
      

  2.   

    可以阿,我用的就是BLOB字段阿,数据驱动引擎用OLEDB FOR ORACLE
    (TBLOBFIELD(rS.FIELDS('blob'))).LOADFROMFILE('....');
    (TBLOBFIELD(rS.FIELDS('blob'))).SAVETOFILE('....');
      

  3.   

    //////////////////////
    改成:query.sql.text:='insert into ATABLE(id,ABLOBFIELD) values('id',empty_blob());
    query.execute;
    query.sql.text:="select * from ATABLE where id='id'";
    query.active:= true;
    query.first;
    (TBLOBFIELD(query.FIELDS('blob'))).LOADFROMFILE('....');

    (TBLOBFIELD(query.FIELDS('blob'))).LOADFROMStream('....');
      

  4.   

    感谢 m_leaner对我的关于"真的就没法用TBlobField写Oracle8i的BLOB类型的字段了???"问题的恢复,我用的是BDE,你说你用的数据驱动引擎是OLEDB FOR ORACLE,该怎么用啊?
    还有,你如果能抽空的调试通过我写的源程序或是指出我的问题的话,我会万分感谢!!!
      

  5.   

    我的问题解决的了 谢谢你 m_leaner