我在做一个关于sybase的c/s结构的应用程序时碰到一个这样的问题:
在我的sybase数据库中有一个字段类行为image,我在程序中要取得这个字段,并把他的值存在一个文件中,我是这样做的:......
query1.sql.add('select PLD from ......');// 这里是我的加的sql,PLD为那个类
                                         // 型为image NULL的字段,目的是要
                                         //取得我想要得PLD字段;
query1.prepare;
query1.open;
str:=query1.fields.fields[0].asstring;//我要把取得值父给我定义的一个string
                                      //变量str中。
......
之后,我又通过文件读取操作把str的值存到一个文件中,但是,我发现我得到的文件的内容少了很多。我想,是不是string类型的大小是有限制的,在我的sybase库中,我的那个类型为image的字段存储的是一幅图,图的格式是有一些点和线组成,存成文件其实就是一个文本文件,里面的存的字符串是点的坐标。
现在不知道要怎么做,请高手指教。

解决方案 »

  1.   

    你先把它读成流,再将流转换成String如何?
      

  2.   

    不知你想做什么存图片
    TBlobField(query1.FieldByName('PLD')).LoadFromFile('C:\pld1.bmp');读图片
    TBlobField(query1.FieldByName('PLD')).SaveToFile('C:\pld1.bmp');
      

  3.   

    String的最大长度为255,你可以使用AnsiString最大长度好像是2GB
      

  4.   

    在默认的情况下String为AnsiString
    可以用生成文件的方法
    var
      FileHandle : integer;
    begin
      FileHandle := FileCreate('c:\a.txt');
      FileWrite(FileHandle, Query1.Fields[0].AsString);
      FileClose(FileHandle);
    end;
      

  5.   

    同意  lws0472(天外飞仙) 
      

  6.   

    我想,之所以出现你说的情况,可能是以为你的文件中有#0等对于字符串来说是结束字符的字符,所以被截断了。
    默认string是AnsiString,最大2G,不存在长度限制的问题。
    图片的话,用“天外飞仙”
      

  7.   

    据最新试验,不是string的问题,应该是fields大小的问题,但是我不知道要怎么做。
      

  8.   

    一定是你的bde设置不对,在bde中的blod size由32(默认)改为64就行了.