我相使用Delphi来显示SQL上的nchar,nvarchar字段, 因为我的用户还是用win98. Delphi应该是用Twidestring来显示那些字段, 所以我可以用程式把那些WideString转回平时的String(可以GB 或 Big5码互换).  可是我曾经试过用BDE, DbExpress, ODBCExpress等, 他们都把所有中文字都显示为????. 我发觉其原因是Delphi上的工具都把那些nvarchar, nchar字段都以Tstring把处理.其中只有当我是用ADO, 他才会用TWideString. 可是若我要提取大量数据时ADO
却是非常慢, 所以我想用其他的控件来连.不知道各路高手有何高见. 或者更直接的方法.

解决方案 »

  1.   

    Delphi 对 Unicode 编码的数据库字段支持好象有一些问题,试着给 Delphi 安装一个 PACK,或许可以解决这个问题。
    论坛中以前有许多人问这样的问题,搜索一下,或许可以找到答案。
      

  2.   

    不是太明白你为什么需要使用nchar,nvarchar字段。Win95/98的API中对WideString处理的函数非常少,所以处理起来比较困难。我想使用char和varchar应该也可以实现需要的功能吧。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  3.   

    上面的说得很对,在Win98/95下面,处理Unicode的确是很慢的,无法避免。其实你可以直接把Tstring类型改变成TwideString,无非引用对应的Pointer转换,一点问题都没有。
      

  4.   

    谢谢你们的意见, 人在江湖, 公司远程数据库是MS SQL 2000, 所有中文字都是unicode, 并选用了 nchar, nvarchar字段, 我们的用户却仍是用win98, 而本地的数据库是沿用的interbase, 我如今需要定时把远程的数据载入到interbase上.虽然win98对unicode的支援极少, 幸好 jedi vcl project中的jclunicode.pas上有上百的function可以调用, 如
    var myDoubleByte :String;
    myunicode :WideString;
    ...
    myDoubleByte := WideStringToStringEx(myUnicode, 936);
    ...很是方便的.问题是当我试用 BDE, DbExpress, ODBCExpress, ... 来连 MS SQL, 其 Query1.FieldValue['MyUnicode'] 都是预先转为 Ansi string, 并显示为 '?????'.
    唯有用ADO, 他的ADODataSet1.FieldValue['MyUnicde']才是WideString, 我才可以做转换.  可是ADO速度较其他都为慢.
    我初步测试比较, ADO only 25rows/sec while BDE, DbExpress can read up to 800 rows/sec. 我其中一个数据表都有200,000条, 用ADO很花时间. 我好希望用其他较快的来连.
    不知道你们有何高见.