现要用delphi读取.dbf表中Memo字段的内容,由于该字段内容中可能含有控制符(因为是经过加密的),Delphi中无论是用了什么控件和方法都无法完整地读出其中的内容,就算是使用‘流’亦是如此。
但如果是在VFP中使用copy memo to file 就可以将内容保有存为文件,或使用repl命令亦可完成字段间的赋值。
用sql语句亦可在表中完成更新。可在delphi中根本就是无法取出内容,请大家帮帮忙啊!

解决方案 »

  1.   

    呵呵,你的Memo字段中保存的是什么类型的数据呢?
    还有,你是用ADO还是BDE呢?
      

  2.   

    RICHEDIT也不行吗
    如果不行还可以用RXLIB里的RXRICHEDIT
    WWW。51DELPHI。COM有下载
      

  3.   

    用 Blob 的方式也不行吗?
      

  4.   

    都不行!我用的是ADO,但BDE应该也是一样的。
    我在2000下可以用流读取并保存成文件,但文件大小比VFP保存的文件小。我现在要应用的是调用一DLL中的函数将此文件转换成一位图文件,如果文件是用VFP保存的则没问题。但奇怪的是,即使直将VFP保存的文件打开后复制到另一文件中保存,用此文件也无法进行转换。必需用原VFP保存的文件。我已经试了很多方法了,但都是不行的。不知道VFP的copy memo to file是如何将Memo字段的内容保存成文件的?
      

  5.   

    delphi中的流的确是有问题的
    不知为什么
    可能是BUG
    我以前用得内存流也是不正确
    明明写入的buffer是对的
    但读出的东西就是不对
    检查流的内存内容也不正确
    根本不等于buffer的内容
    不过memo可以用asstring读出来的然后保存到stringlist中
    存成文件
    看看行不行
      

  6.   

    各位,问题解决了!:)
    我改用BDE就可以了,但不知为何ADO读出的流是错误的???如果不想使用BDE又将使用什么控件或方法呢?欢迎探讨!另外
    就算使用的是BDE也只是保存成文件才能正确地读出流的内容,而其他控件就算用LoadFromStream也是无法正确显示其内容。因为在流中可能包含了控制字符。
      

  7.   

    我的表中有1000多条记录,用BDE打开后读出第一条记录Memo的流后,移到最后一条记录并读取Memo的流,然后再次移到第一条记录读取Memo的流,可是却读不出Memo中的内容了,报错'invalid BLOB handle in recored buffer'!BDE也有问题啊!!
      

  8.   

    碰到这样的情况最好还是从你保存在数据库里的文件入手想想办法,一般我都是在保存时就对它预处理一下,对一些会出问题的字符采取变通的办法,比如说像用#13来代表真实的chr(13)那样.这样可以保证数据能安全地写入和读出.
    预处理对编程会带来一些麻烦,也会使你的数据冗余变大,但是它所带来的在兼容性方面的好处还是很值为此得花些代价的.而且现在的CPU,HDD都够快,够大,预处理的那些缺点应该不成问题.
      

  9.   

    我是要从Memo中原原本本地取出里面的数据,因为那是用压缩算法写进去的,读出也要解缩算法转成图像文件,因为是二次开发,是使用别的Dll中的函数,所以要求不能对Memo中的内容修改,一修改就无法转成图像了。以下将说明Delphi中的重大Bug,这大Bug可真难找啊。1.使用Adoquery、BDE的query和Table控件从Memo中读出的流内容并不完相同。(只有用文件比较工具才可看出)2.如果使用BDE的query和Table,在打开表后一旦将记录指针移到最后,则除了最后几条录能正常读取Memo中的流外,靠前面的其他记录均无法读出,报错'invalid BLOB handle in recored buffer',。而用ADOQuery则无此问题。代码如下,环境是Delphi6 + update 2 + ODBC连接VFP数据库(当前操作的表有1000条左右数据)var
      SourceStream: TMemoryStream;
    begin
      try
        SourceStream := TMemoryStream.Create;
        try    (query1.FieldByName('carve_info') as TBlobField).SaveToStream(SourceStream);    except
           ShowMessage('图像流读取失败');
        end;    if SourceStream.Size > 0 then
        begin
          SourceStream.Position := 0;
          SourceStream.SaveToFile('kkk.bin');  //保存成文件待用
          memo1.Lines.LoadFromStream(SourceStream);
        end;  finally
        SourceStream.Free;
      end;
    end;
      

  10.   

    问题清楚了,将DBF数据库转为MDB,并且将原Memo字段类型改为OLE类型,再使用ADO读取就可以了。BDE确实有BUG!