Delphi如何支援 nchar, nvarchar字段的unicode中文字.

erickleung 2002-12-29 05:16:28
我相使用Delphi来显示SQL上的nchar,nvarchar字段, 因为我的用户还是用win98. Delphi应该是用Twidestring来显示那些字段, 所以我可以用程式把那些WideString转回平时的String(可以GB 或 Big5码互换). 可是我曾经试过用BDE, DbExpress, ODBCExpress等, 他们都把所有中文字都显示为????. 我发觉其原因是Delphi上的工具都把那些nvarchar, nchar字段都以Tstring把处理.

其中只有当我是用ADO, 他才会用TWideString. 可是若我要提取大量数据时ADO
却是非常慢, 所以我想用其他的控件来连.

不知道各路高手有何高见. 或者更直接的方法.
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
erickleung 2002-12-30
  • 打赏
  • 举报
回复
谢谢你们的意见, 人在江湖, 公司远程数据库是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很花时间. 我好希望用其他较快的来连.
不知道你们有何高见.
BlueTrees 2002-12-29
  • 打赏
  • 举报
回复
上面的说得很对,在Win98/95下面,处理Unicode的确是很慢的,无法避免。

其实你可以直接把Tstring类型改变成TwideString,无非引用对应的Pointer转换,一点问题都没有。
lxpbuaa 2002-12-29
  • 打赏
  • 举报
回复
不是太明白你为什么需要使用nchar,nvarchar字段。Win95/98的API中对WideString处理的函数非常少,所以处理起来比较困难。我想使用char和varchar应该也可以实现需要的功能吧。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
CloneCenter 2002-12-29
  • 打赏
  • 举报
回复
Delphi 对 Unicode 编码的数据库字段支持好象有一些问题,试着给 Delphi 安装一个 PACK,或许可以解决这个问题。
论坛中以前有许多人问这样的问题,搜索一下,或许可以找到答案。
jaguarcts 2002-12-29
  • 打赏
  • 举报
回复
up

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧