Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 25701
Рейтинг: 2091
#1351: 2015-03-03 01:26:34 ЛС | профиль | цитата
Gunnman, ты не сможешь просмотреть личку, поэтому отвечу здесь

nesco писал(а):
Gunnman писал(а)
Если я правильно понял Вы сделали компонент Sqlite?

Нет, не я делал. Его делал Dilma, я только чуть чуть допиливал. А репер на него писал tsdima, я ему только условия корректировал под разные версии, не меняя сам код. Я замутил DS модули, но допиливал их опять-таки Dilma. Серьезно знал SQLite Alexbotch, но он куда-то пропал. Я же API SQLite не знаю вообще, а рыться в нем времени у меня сейчас нет, от слова "совсем"

карма: 21

0
Ответов: 655
Рейтинг: 18
#1352: 2015-03-03 01:32:27 ЛС | профиль | цитата
Личка у меня читабельна) насчет sqlite понял...
карма: 0

0
Разработчик
Ответов: 25701
Рейтинг: 2091
#1353: 2015-03-03 01:51:19 ЛС | профиль | цитата
Gunnman писал(а):
Личка у меня читабельна

Странно, раньше у участников не читалась, может поправили уже.
карма: 21

0
Ответов: 16884
Рейтинг: 1237
#1354: 2015-03-03 08:37:26 ЛС | профиль | цитата
Gunnman писал(а):
Мне кажется sqlite3api.pas тоже править надо.
Правильно кажется.
Зайди сюда: https://github.com/stijnsanders/TSQLite
там есть базовый файл SQLite.pas (это то, что у нас называется sqlite3api.pas)
Найди в нем функцию sqlite3_open_v2() и сотвори себе по образу и подобию
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#1355: 2015-03-03 15:14:14 правка | ЛС | профиль | цитата


Редактировалось 7 раз(а), последний 2021-05-21 07:59:02
карма: 0

0
Ответов: 655
Рейтинг: 18
#1356: 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
Ответов: 4525
Рейтинг: 722
#1357: 2015-03-04 18:31:22 ЛС | профиль | цитата
В SqLite3Api.pas sqlite3_open встречается два раза, ты изменил только один. Но лучше не заменять, а добавить новую функцию рядом.
карма: 26

0
Ответов: 655
Рейтинг: 18
#1358: 2015-03-04 19:04:03 ЛС | профиль | цитата
Netspirit, спасибо,поправил, но теперь ругается на C:\HiAsm\Elements\delphi\code\hiSQLite_DB.pas(36) Error: Undeclared identifier: 'sqlite3_open'
------------ Дoбавленo в 18.55:
Такссс hiSQLite_DB.pas поправил))) скомпилировалось, буду тестировать!
------------ Дoбавленo в 19.04:
Скомпилировалось не открывается БД..
карма: 0

0
Ответов: 16884
Рейтинг: 1237
#1359: 2015-03-04 20:51:52 ЛС | профиль | цитата
Gunnman, я тебе флаг 8 написал с потолка. Найди соответствующее значение своему SQLITE_OPEN_NOMUTEX

------------ Дoбавленo в 20.51:
Если не ошибаюсь, то значение вроде 0x00008000
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1360: 2015-03-04 22:59:02 ЛС | профиль | цитата
Tad, дык я знаю что с потолка! я так в пример привел, в документации значение 0x00008000.

в sqlite3api.pas сейчас есть функция:

sqlite3_open_v2(dbname: PChar;var db:pointer;Flag1:integer;Flag2:integer;VFXchar):integer; cdecl;

в hiSLite_DB.pas есть процедура:

sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,$00000002,$00008000,nil);

где (Flag1) $00000002=SQLITE_OPEN_READWRITE (Flag2) $00008000=SQLITE_OPEN_NOMUTEX (VFX)nil

при компиляции ошибок нет, при попытке открыть БД - "Error 216 000018B21"

Если использую такой вариант:
qlite3_open_v2(dbname: PChar;var db:pointer;Flag1:integer;VFXchar):integer; cdecl;
и
sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,$00000002,nil);

То БД открывается и в нее успешно пишетсячитается.

Не могу понять как 2 параметра передать!

Тут https://www.sqlite.org/c3ref/open.html сказано что их может быть несколько...как ни пытаюсь не получается больше 1 параметра указать

карма: 0

0
Ответов: 4525
Рейтинг: 722
#1361: 2015-03-05 11:46:58 ЛС | профиль | цитата
sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,$00000002 or $00008000,nil);

карма: 26

0
Гость
Ответов: 17029
Рейтинг: 0
#1362: 2015-03-05 15:58:14 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 07:59:02
карма: 0

0
Ответов: 655
Рейтинг: 18
#1363: 2015-03-05 16:08:50 ЛС | профиль | цитата
Почему вариат с and может не работать? в документации сказано:

The sqlite3_open_v2() interface works like sqlite3_open() except that it accepts two additional parameters for additional control over the new database connection. The flags parameter to sqlite3_open_v2() can take one of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX, SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE, SQLITE_OPEN_PRIVATECACHE, and/or SQLITE_OPEN_URI flags:

QLITE_OPEN_READWRITE
SQLITE_OPEN_READONLY
карма: 0

0
Ответов: 16884
Рейтинг: 1237
#1364: 2015-03-05 17:11:42 ЛС | профиль | цитата
Gunnman, а не пробовал $00008002
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1365: 2015-03-05 17:16:54 ЛС | профиль | цитата
Tad, база открылась)))) т.е. аргументы нужно складывать???
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)