【发布时间】:2011-05-10 04:23:52
【问题描述】:
有一个带有 CL8MSWIN1251 代码页设置的 Oracle 9 db 和带有一些编辑字段的 Delphi XE。
我需要将 Delphi 7 中制作的项目转换为 Delphi Xe 项目才能使用并能够看到 UTF8 数据。
所以我使用 Delphi XE 打开了 dpr 文件,它自动转换为 dproj。但是当我尝试向数据库中插入一些数据时,我得到了问题符号(“?”)而不是一些 utf8 字符。 我尝试使用 ansitoUTF8(edit1.text) 从 Edits (Tedit) 转换数据。它不起作用。 然后我在 XE 中开始了一个新项目,快速添加了一些编辑来检查 ansitoutf8 函数,它运行良好,并将数据插入到同一个数据库和同一个表中。
有一条规则:我不能更改 db 中的代码页设置。
begin
adoquery1.close;
adoquery1.sql.text:='insert into table (data1,data2) values ('+#39+ansitoUTF8(edit1.text)+#39+','+#39+ansitoUTF8(edit2.text)+#39+')';
adoquery1.execsql;
end;
有什么建议吗?
【问题讨论】:
-
您知道 sql.text 是一个字符串,因此类似于 D2009 中的 UnicodeString 吗?无论您之前做什么,它都会在分配给 sql.text 时转换为 unicode。您可以通过使用查询参数来解决这个问题(无论如何我都会推荐),将 DataType 设置为 ftString。
-
您无法更改数据库代码页,但表是否在您的控制之下?检查 nvarchar 类型:download.oracle.com/docs/cd/A91202_01/901_doc/server.901/a90120/…
标签: delphi utf-8 delphi-7 oracle9i delphi-xe