Я пытаюсь установить параметр 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
?