谁知道为什么用delphi的ado对象取出来的clob字段的内容不全?
我的代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
  adoblob1:TADOBlobStream;
  adoblob2:TADOBlobStream;
  i,size:Integer;
begin
  i:=0;
  adoc.Open;
  adoq.Connection:=adoc;
  adoq.SQL.Clear;
  adoq.SQL.Add('select nr from ck_jxu_tab_lsyg');
  adoq.Open;
  adoq.First;
  while not adoq.Eof do
  begin
    inc(i);
    size:=TField(adoq.FieldByName('nr')).DataSize;
    adoblob1:=TADOBlobStream.Create(TMemoField(adoq.FieldByName('nr')),bmRead);
    adoblob1.SaveToFile('c:\x'+IntToStr(i)+'.txt');
    adoblob1.free;
    adoq.Next;
  end;
  adoq.Close;  adoc.Close;
end;
其中nr为Clob字段类型

解决方案 »

  1.   

    没那么复杂吧!
    var
      SourceStream: TMemoryStream;
    begin
    SourceStream := TMemoryStream.Create;
    ...
    (adoq.FieldByName('nr') as TBlobField).SaveToStream(SourceStream);
    SourceStream.SaveToFile('c:\x+IntToStr(i)+.txt');
    ...
    end;
    这样就可以了,还有你访问的字段一定要是BLOB字段,如是Memo就会出现读不全的情况。用BDE的Query就不管BLOB还是Memo都可以读全,但BDE的Query有Bug。
      

  2.   

    我说的就是oracle的Clob字段读不全的情况。希望高手给于解答。
    谢谢。
    还有一问。对于超过10K的文本文件,为何插入数据库时会出现死机现象。
    程序如下:
    temptext:='update '+tbname+' set '+BlobSL[i]+'=:bmemo '+'where '+pritext;
    adoRec.SQL.Add(temptext);
    adoRec.Parameters.ParamByName('bmemo').LoadFromFile(BlobFileName,ftBlob);
    adoRec.ExecSQL;
    adoRec.Close;
    当这个文件BlobFileName查过2K大小时,ExecSQL函数就永远不能返回了.不止为什么。
    忘高手指教.