在SQLSERVER中,假如有一字段"A",类型为nvarchar(6)。
如果只输入英文时,最多只能输入6个。输入中文时,也最多能输入6个。
但如果用delphi的adoquery或clientdataset连接数据库且绑定到tdbedit或tdbgrid后,
如果输入中文时,却只最多只能输入3个。输入英文就可以输入6个。
请问各位大虾一般采用什么方法,可以像sqlserver那样中英文输入都是可以输入6个的?csdn今天是怎么了,让我的贴子连发三次,还不能打开。

解决方案 »

  1.   

    使用TntDBGrid应该可以,你测试看看!
      

  2.   

    试试TntUnicode控件use TntDB;
    ...
    var
    ws: WideString;
    begin
    ws := TTntWideStringField(FieldByName('Name')).AsWideString;
    end;
    如果上面的代码没问题的话,用
    MultiByteToWideCharWideChartoMultiByte
    这2个函数也应该可以的,原理都一样。
      

  3.   

    我们公司不用TntDBGrid这类控件,还有其他办法吗?
      

  4.   

    直接在adoquery这个组件里找到A这个字段,然后将它的size设置成6,试试看
      

  5.   

    不用数据绑定控件,直接使用SQL查询和提交数据就绕开这个问题了
      

  6.   

    建議使用TntUnicode組件或直接修改字段長度
      

  7.   

    --------------------------------
    因很多类型都是nvarchar类型的,如果不绑定控件,就得写代码限制每个控件的输入长度,
    这样虽然可行,但是比较麻烦。
      

  8.   

    不设置默认就是6的,类型是widestring。
      

  9.   

    +1
    最好使用varchar类型,我是从来不用nvarchar类型,如果方便可以更改数据库
      

  10.   

    如果不用nvarchar类型有些特殊的字符好像保存不了。
      

  11.   

    新浪搜狗网易Google雅虎中搜百度有道mp3歌词图片
      

  12.   

    应该使用nvarchar类型字符,因为它是专为支持汉字、日文、韩文。
      

  13.   

    我在 Delphi2006+MSSQL2008 中测试,没有你说的问题。
      

  14.   

    我在 Delphi2006+MSSQL2008 中用 dbExpress 测试正常,没有你说的问题。
    用 ADO 测试,存在你说的问题,可以用下面代码解决,但也存在问题(输入英文
    字符和数字时可能超长)。  with ADODataSet1 do
      begin
        Active:=false;
        for I := 0 to FieldCount - 1 do
          if Fields[i].DataType=ftWideString then
            Fields[i].Size:=Fields[i].Size*2;
        Active:=true;
      end;
      

  15.   

    我使用SQL数据字符类型都是使用:nvarchar。
    1、nvarchar对汉字支持最好。
    2、nvarchar对Chr类字符,也是用双字节保存。所以nvarchar(10)表示,仅支持10个汉字或10个英文字符。
    3、使用nvarchar是今后的方向吧。
      

  16.   

    我们公司还在用D6 + SQLSERVER2000