我有一个SQLite数据库,它被配置为:
SQLiteFDConnection->Params->Values["StringFormat"]=_D("Unicode");
SQLiteFDConnection->Params->Values["OpenMode"]=_D("CreateUTF8");
它有两个通过TFDQuery
访问的表:
A)Table1
(TFDQuery
)具有持久化字段,并使用TDataSource
来显示TDBGrid
中的项目。
B)Table2
(TFDQuery
)也有持久字段。Table1
可以正常工作,它可以正确显示外来字符,并且永久字段被设置为使用TWideStringField
。Table2
的字段也是TWideStringField
,直接使用Table2
到ExecSQL()
、INSERT INTO
和UPDATE
语句。对于回阅读,它使用TFDQuery::Open()
,然后使用FieldByName()
。但是,外国字符只是问号。
我的问题是,既然我将StringFormat
设置为Unicode
,为什么Table2
不能正确使用Unicode?
更新用途:
SQLiteDataModule->Table2->ExecSQL("UPDATE Table2 SET Name=:N where UniqueId=:U",
OPENARRAY(Variant, (UnicodeStringVarName, UniqueId)));
阅读回使用SQLiteDataModule->Table2->Open()
中的Select * from Table2
:
String Name=SQLiteDataModule->Table2->FieldByName("Name")->AsString;
一个问题是我不能输出调试信息到事件窗口并显示正确的字符。我想在Update
查询之前检查它,但它总是显示?? ??
(有4个字符)。Name
用于TTreeNode
,如果使用普通字符串,我可以看到外来字符,因此在存储和加载回?? ??
结果之间的某个地方。
字符串为UnicodeString
。
有什么想法吗
1条答案
按热度按时间cwdobuhd1#
答案是您需要手动提供字段类型: