Вверх ↑
Ответов: 655
Рейтинг: 18
#1: 2015-03-04 18:26:55 ЛС | профиль | цитата
И так, библиотеку скомпилировал с параметром SQLITE_THREADSAFE=1, библиотека многопоточность поддерживает.
Для того чтобы ей воспользоваться нужно открывать соединение через sqlite3_open_v2.

согласно документации:

int sqlite3_open_v2(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb, /* OUT: SQLite db handle */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);

Используется 4 параметра при открытии соединения (на 2 больше чем при обычном sqlite3_open).

1) параметр имя_дб, 2) хендо_дб, 3) флаг (перечень примеров тут https://www.sqlite.org/c3ref/open.html), 4) - объект виртуальной файловой системы (можно не указывать (NULL)).

Далее:

так как мне требуется указать флаг SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ и не указывать VFS,то в я в файле hiDS_Sqlite3.pas

строку

sqlite3_open(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id);

меняю на:

sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,8,nil); - где 8 - флаг, а nil -NULL (использовать объект VFS по умолчанию)

в файле sqlite3api.pas

строку

function sqlite3_open(dbname: PChar; var db:pointer):integer; cdecl;

меняю на:

function sqlite3_open_v2(dbname: PChar;var db:pointer;Flags:integer;VFSModuleChar):integer; cdecl; -где флаг integer (8), а объект VFS Pchar (nil)

строку

function sqlite3_open; asm pop ebp; jmp _sqlite3_open end;

меняю на:

function sqlite3_open_v2; asm pop ebp; jmp _sqlite3_open_v2 end;

строку

function _sqlite3_open(dbname: PChar; var db:pointer):integer; cdecl; external;

меняю на:

function _sqlite3_open_v2(dbname: PChar;var db:pointer;Flags:integer;VFSModuleChar):integer; cdecl;

Компилирую проект и получаю:
"C:\HiAsm\Elements\delphi\code\SqLite3Api.pas(104) Error: Unsatisfied forward or external declaration: 'sqlite3_open_v2'"
"C:\HiAsm\Elements\delphi\code\hiSQLite_DB.pas(5) Fatal: Could not compile used unit 'SqLite3Api.pas'"

Товарищи подскажите что делаю не так..

карма: 0

0