现在有一个MSSQL的表单的一个字段是varchar(8000)型的。
但是利用delphi5提供的TQuary来查询取值的时候
FieldByName('PValue').AsString 它的值总是在255的地方截断了。
在数据库中是可以存贮超过255字节的内容的。
请教高手如何读取和写入超过255字节的string?
书上说“TStringField:字符串字段,最大字节数8192,包括NULL字符”。

解决方案 »

  1.   

    这样试试:
    var
      S:AnsiString;
    begin
      S:=Query1.FieldByName('PValue').AsString ;
      ShowMessage(S);
    end;
      

  2.   

    FieldByName('PValue').DataSize的值也是256。
    FieldByName('PValue').Value 也还是255。
    我不知道是要在Delphi中设置来解决
    还是MSSQL需要调整?
    我使用的XP+MSSQL7.0+Delphi5.0开发环境。
      

  3.   

    其实Delphi5默认的string就是ansistring
    我已经试过利用ansistring读取,但是问题照旧。
    因为再Delphi可以很容易的给一个string赋超过255字节的值的。
    看来不是Delphi不能处理。
    那问题到底出在什么difang
      

  4.   

    SQL Data Out: MSSQL - Column = 5, Name = PValue, Type = fldZSTRING, Precision = 255, Scale = 0, Data = 1.00,1.00,1.00,1.00,1.00,1.00,1.12,1.08,1.05,1.04,1.03,1.02,1.24,1.16,1.10,1.08,1.06,1.04,1.36,1.24,1.15,1.12,1.09,1.06,1.50,1.32,1.20,1.16,1.12,1.08,1.62,1.40,1.25,1.20,1.16,1.10,0,1.48,1.30,1.24,1.20,1.12,0,1.56,1.35,1.30,1.24,1.14,0,1.65,1.40,1.36,1.28以上是sql monitor 跟踪的结果。“Precision = 255”我认为是问题的关键。
      

  5.   

    实在不行就这样试试:
    var 
      S:AnsiString;
    begin
      S:=TWideString(Query1.FieldByName('PValue')).AsString;
      ShowMessage(S);
    end;
    试试!告诉我结果
      

  6.   

    S:=TWideString(Query1.FieldByName('PValue')).AsString;
    根本通不过,因为TWideString没有定义。
    改写为
    s:=WideString(FieldByName('PValue').AsString);
    不出来还是只有255个字节。看来问题不是是出来有什么样的变量去接受字段的值,而是字段本身的值就是
    已经限制在255字节了。烈焰老兄是不是很失望呀。我更是呀。
      

  7.   

    这个问题我碰到过,把varchar(8000)改为text或者ntext就好了
      

  8.   

    是不是你的版本有问题,我可以去除295个字符。
    delphi6
    测试方法:
     var s: string;
    begin
      s:=ADOTable1.Fields.Fields[0].AsString;
      caption:=inttostr(length(s));
    end;
      

  9.   

    回老家一趟,结帖有点晚了。
    看来只好使用text字段了。
    使用delphi6还要再装。我也不熟。