我在用Tquery查询时,要把结果显示在Tmemo中
数据库的字段长度定义为varchar 500
tt:array[0..600] of char;
 
  query1.GetFieldData(query1.Fields[I],@tt);
  memo1.Text :=tt;
可是取出来的字串长度总是最大为255,一百多个汉字左右,
我到数据里查看,那个字段是纪录了500,二百多个汉字左右。
请问这是什么原因,有什么办法解决,
谢谢。

解决方案 »

  1.   

    真接用数据库控件不好吗?
    为何用MEMO呀
      

  2.   

    对不起,我不是回答问题,只是有一个同样的问题要请教:
    用delphi 5, bde511,然后通过tquery取数据库表中的一个varchar(500)字段中的咚咚,用string通过fieldbyname.asstring来获得,也是只有255个字节长度,如何处理?
      

  3.   

    Tempstream: Tmemorystream;TblobField(query1.Fields[i]).SaveToStream (Tempstream);
    会报,invalid classtype的错误,
    是不是要在Tquery控件中设置什么属性参性才能这样的?
    我看流的操作例子里是不用的,
    救命啊,
      

  4.   

    很奇怪,我有一个朋友也是deplphi5.62,也是bde511,也是sql server 2000 sp3,也是windows professional,他就是可以用我用的方法取出3k以上的字节出来,现在我开始怀疑是否是delphi安装盘或者是环境什么的问题,楼主的环境是什么样子的?
      

  5.   

    你的方法是什么方法啊,
    我的Tquery里写了静态的查询语句,还指定了列的别名,
    不知有没有关系。
    我看一些参考说,
    TblobField的那个域必须能edit还必须没有fiter
    环境我也是差不多的,
    问一下delphi 编译器的设置在那里设定的,?
      

  6.   

    还有啊你用asString的话是要设定
    string为长字串的
    要不string最多是只能有255
      

  7.   

    有没有QQ啊 我的QQ
    2884948
    交流一下
      

  8.   

    //'voice_content'是表中的一个varchar(1024)字段
    var
      i:integer;
      temp:string;
    begin
      with FDataModule.Query do
      begin
        Active := False;
        RequestLive := True;
        SQL.Clear;
        SQL.Add('Select * from t_mailtosend where sm_status = 0');    First ;
        While not eof do
        begin
          temp := FieldByName('voice_content').asstring;
          temp := inttostr(length(temp)) ; //运行时得到的数据是255    end
        end;//while  end; //with DataModule2.Query2
    end;
      

  9.   

    晕我也不明白了,
    惨啊惨,你的朋友就能用这样的方法得到?
    我见有的文章说要设定编译器的一个属性为H+
    就能自动支持长字串。
    要不你的string类就只能得到255的长度
    还有,是不是和query控件有什么关系啊,?
    我怀疑在数据库里提取的时候就那样了,
    可是又很难看到field里的内容哎,
      

  10.   

    关键是我用memo也试过,不行,我的朋友用memo也可以:(
      

  11.   

    用  QUERY1。FIELDS[I].DATASIZE看看有多少字符
      

  12.   

    楼上谢了
    我用datasize看到的这个项
    无论我的数据实际是多少,
    都是256,
    这是什么问题,
    能自己在程序里指定吗?
      

  13.   

    var
      tt:array[0..600] of char;
      i :integer;
    begin
      ADOquery1.GetFieldData(ADOquery1.FieldByName('teachar'),@tt);
      memo1.Text :=tt;
    end;