sqlite - sqlite3_db_config()的delphi用法
问题描述
我正在尝试将选项设置SQLITE_DBCONFIG_MAINDBNAME
为sqlite3_db_config()
自定义选项,但在 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_DBCONFIG_MAINDBNAME
此选项用于更改“主”数据库模式的名称。唯一的参数是一个指向常量 UTF8 字符串的指针,它将成为新的模式名称来代替“main”。SQLite 不会复制新的主模式名称字符串,因此应用程序必须确保传递给此 DBCONFIG 选项的参数在数据库连接关闭之前保持不变。
那么,我需要如何格式化第三个参数sqlite3_db_config
呢?
解决方案
UTF8Encode
为其返回值创建一个临时字符串。您必须将该值存储在具有足够长生命周期的变量中:
var
MainDBNameUTF8: UTF8String;
...
MainDBNameUTF8 := ...;
sqlite3_db_config(FHandle, SQLITE_DBCONFIG_MAINDBNAME, PAnsiChar(MainDBNameUTF8));
推荐阅读
- angular - 为什么我的网络应用程序对每个服务器请求使用越来越多的内存?
- python - PyInstaller - 隐藏的导入列表
- java - 没有特定方法的Java二分查找
- java - 读取多行并将其拆分为单独的字符串
- nlp - 如何为每种语言获得一种反向词形还原?
- gstreamer - 为什么相同的 gstreamer 命令在 WINdows 上有效,但在 linux 上无效?
- javascript - 如何使用正则表达式从电话号码中删除空格和括号?
- javascript - React onKeyPress 事件未检测到退格键
- dynamic-programming - 在无界背包算法中选择了哪些项目?
- java - @PatchMapping 的用例