sqlite3_db_config()的Delphi用法
我试图通过sqlite3_db_config()的Delphi用法,sqlite,delphi,c-api,Sqlite,Delphi,C Api,我试图通过sqlite3\u db\u config()将SQLITE\u DBCONFIG\u MAINDBNAME选项设置为自定义选项,但在Delphi 10.3中,这些指针仍然存在问题。连接运行正常,但稍后的PRAGMA database_list返回的不是我之前输入到函数中的内容。第三个参数是我正在试验的,它是可变参数的一部分: // bind method to sqlite3.dll: sqlite3_db_config: function (ppDb: Psqlite3; op:
sqlite3\u db\u config()
将SQLITE\u DBCONFIG\u MAINDBNAME
选项设置为自定义选项,但在Delphi 10.3中,这些指针仍然存在问题。连接运行正常,但稍后的PRAGMA database_list
返回的不是我之前输入到函数中的内容。第三个参数是我正在试验的,它是可变参数的一部分:
// bind method to sqlite3.dll:
sqlite3_db_config: function (ppDb: Psqlite3; op: Integer): Integer; cdecl varargs;
...
var
FMainDbName: String;
begin
FMainDbName := 'chinook';
// shows "" (empty string)
FLib.sqlite3_db_config(FHandle, SQLITE_DBCONFIG_MAINDBNAME, PAnsiChar(UTF8Encode(FMainDbName)));
// shows the first character only: "c"
FLib.sqlite3_db_config(FHandle, SQLITE_DBCONFIG_MAINDBNAME, PChar(FMainDbName));
end;
SQLite文档说明:
SQLITE\u DBCONFIG\u MAINDBNAME
此选项用于更改“主”数据库架构的名称。唯一的参数是一个指向常量UTF8字符串的指针,该字符串将取代“main”成为新的架构名称。SQLite不会复制新的主架构名称字符串,因此应用程序必须确保传递到此DBCONFIG选项的参数在数据库连接关闭之前保持不变
那么,我需要如何格式化
sqlite3\u db\u config
的第三个参数?UTF8Encode
为其返回值创建一个临时字符串。必须将该值存储在具有足够长生存期的变量中:
var
MainDBNameUTF8: UTF8String;
...
MainDBNameUTF8 := ...;
sqlite3_db_config(FHandle, SQLITE_DBCONFIG_MAINDBNAME, PAnsiChar(MainDBNameUTF8));
就这样!我显然没有在文档中对这个细节给予足够的关注。谢谢你的指点!