我有一个 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)));
读回来在
Select * from Table2
中使用SQLiteDataModule->Table2->Open()
:
String Name=SQLiteDataModule->Table2->FieldByName("Name")->AsString;
一个问题是我无法将调试信息输出到事件窗口并显示正确的字符。我想在
Update
查询之前检查它,但它总是显示?? ??
(有4个字符)。 Name
在 TTreeNode
中使用,如果我使用普通字符串,我可以看到外来字符,因此在存储和加载它之间的某个地方会产生 ?? ??
.
字符串是一个
UnicodeString
.
有什么想法吗?