Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite3_db_config()的Delphi用法_Sqlite_Delphi_C Api - Fatal编程技术网

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));

就这样!我显然没有在文档中对这个细节给予足够的关注。谢谢你的指点!