在Delphi6中怎么样让adoquery控件识别Unicode呢?(请具体举例子)分不够再加!
如题!!!!!!!!!!!!!!!!!!!!!!! 问题点数:100、回复次数:20Top
1 楼pwzhu666(暴龙)回复于 2003-12-02 17:58:09 得分 10
Unicode是什么啊Top
2 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2003-12-02 18:07:13 得分 70
ADO 本身就支持Unicode,倒是VCL支持得很弱。Top
3 楼likekoko(慢慢来吧^^)回复于 2003-12-02 18:22:10 得分 0
我就想往Adoquery里的sql属性添加sql语句,里面夹着 韩文 ,结果ado显示为?号!!
国际标准组织于1984年4月成立ISO/IEC JTC1/SC2/WG2工作组,针对各国文字、符号进行统一性编码。1991年美国跨国公司成立Unicode Consortium,并于1991年10月与WG2达成协议,采用同一编码字集。目前Unicode是采用16位编码体系,其字符集内容与ISO10646的BM(BasicMultilingual Plane)相同。Unicode于1992年6月通过DIS(Draf International Standard),目前版本V2.0于1996公布,内容包含符号6811个,汉字20902个,韩文拼音11172个,造字区6400个,保留20249个,共计65534个。Top
4 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2003-12-02 18:25:33 得分 0
结果ado显示为?号!!
~~~~~~~~~~~~~~~~~~~~~~
ADO怎么会显示呢?他都是不可视控件怎么能显示数据?
你说的是从DBEdit或者DBGird里面显示的数据吧?Top
5 楼likekoko(慢慢来吧^^)回复于 2003-12-02 18:43:29 得分 0
我就想往Adoquery里的sql属性添加sql语句,里面夹着 韩文 ,结果ado显示为?号!!
如下:
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from tqxdj where name='''+tntedit1.Text+'''');
prepared;
//tntedit2.Text:=sql.Text;
open;
end;
其中tntedit1是第三方控件,它能够识别和显示 韩文,但到adoquery1.sql中后变为?了。
我用tntedit2来看sql语句!结果看到 select * from tqxdj where name='?' :(Top
6 楼likekoko(慢慢来吧^^)回复于 2003-12-02 18:53:07 得分 0
这个问题好像挺难的,希望前辈们多多指点啊!!!在此先谢谢了!!Top
7 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2003-12-02 18:55:12 得分 0
VCL不支持Unicode,没办法。
他封装了ADO的原操作,ADO本身支持Unicode,据说VCL.net的内核支持Unicode了Top
8 楼likekoko(慢慢来吧^^)回复于 2003-12-02 19:04:32 得分 0
难道真的只有象我用的第三方控件那样去做一个能识别unicode的adoquery控件吗?真的没有办法了吗?做一个的话太难了,就现在来说就是不可能了!!555Top
9 楼likekoko(慢慢来吧^^)回复于 2003-12-02 19:18:41 得分 0
多谢pazee(耙子) 的关注!
其他前辈还有什么办法么??Top
10 楼likekoko(慢慢来吧^^)回复于 2003-12-02 20:22:58 得分 0
请大家多多帮忙啊,要锁楼了,我不得不下班了!明天在来请教!!!Top
11 楼flyforlove(吾将远去)回复于 2003-12-02 20:41:52 得分 10
用WideCharToString转换一下不可以吗?Top
12 楼likekoko(慢慢来吧^^)回复于 2003-12-03 08:37:32 得分 0
to: flyforlove
好像不行!!!真是头大啊!!:(Top
13 楼flyforlove(吾将远去)回复于 2003-12-03 09:25:09 得分 0
如果你像在中文系统上显示韩文,
这个函数可能没有用,
只能是以unicode的形式显示,
而vcl不支持unicode,所以除了自己扩展外,只能依靠第三方控件了。
有个unicode edit 的控件,可能对你有帮助,不过我没用过,你可以试一下。Top
14 楼overtime(空间在线)回复于 2003-12-03 09:31:29 得分 10
那你用动态加载的方式来加载sql看可不可以?(将sql语句放到文本文件中(计事本支持unicode的)),如果在界面上显示,那就需要找相关的函数来转换了Top
15 楼likekoko(慢慢来吧^^)回复于 2003-12-03 10:02:24 得分 0
adoDataSet 的 commandtext 可以显示 韩文,
如下:
with adoDataSet1 do
begin
close;
commandtext:='';
commandtext:='select * from tqxdj where name='''+trim(tntedit1.Text)+'''';
prepared;
tntedit2.Text:=commandtext;
open;
end;
其中 tntEdit2.text 显示为 select * from tqxdj where name='뮤'。不再是adoquery中的select * from tqxdj where name='?'了,可是明明数据库中有 뮤 这个值,怎么就是查不出来呢??
Top
16 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2003-12-03 11:11:43 得分 0
你看看 TADOQuery的SQL的属性,它是TStrings,是VCL的字符串类,它是单字节类型的,
而TADODataSet的CommandText是WideString,使双字节的字符串类型,就是unicode字符串,所以他支持unicodeTop
17 楼likekoko(慢慢来吧^^)回复于 2003-12-03 11:50:06 得分 0
to:pazee
对啊,所以用她就可以了!现在查询的问题也解决了,只要吧adoDataSet 的paramCheck属性关闭就可以查询到记录了!具体代码如下:
with adoDataSet1 do
begin
close;
commandtext:='';
commandtext:='select * from tqxdj where name=N'''+tntedit1.Text+'''';
prepared;
//tntedit2.Text:=commandtext;
open;
end;
其中N字母是从Transact-SQL 参考中查unicode中的用法!Delphi6.0 +windows2000Server下通过!!:)
Top
18 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2003-12-03 12:28:20 得分 0
VCL不能很好的支持Unicode,在处理多字节字符串非常麻烦,目前都是通过第三方控件或者变通的方法解决,不够都不彻底,还一个大问题就是TClientDateSet的Filter对中文的支持也不行。Top
19 楼likekoko(慢慢来吧^^)回复于 2003-12-03 14:48:06 得分 0
是呀,不过还是我太菜!多谢各位前辈的帮助!
最后再问一个菜问题:
怎么结贴,给你们分?^^Top
20 楼likekoko(慢慢来吧^^)回复于 2003-12-03 15:49:15 得分 0
后续: ADoCommand ADoDataSet 都行!他们的CommandText都是WideString类型!Top




