Вверх ↑
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
#16: 2006-10-16 12:51:25 ЛС | профиль | цитата
такая странная функция CheckSQLiteLoaded
На самом деле, если делать так, как я сделал, проверять уже не нужно. Если .dll не найдена, то виндовоз сам скажет, что в таких-то каталогах я её не нашёл, и программу запускать не будет. С вариантом статической линковки, я думаю, вопросов тоже не возникает.

[size=-2]------ Добавлено в 12:51
оригинальный SQLite3Api(без изменений) ... В таком виде и предлагаю выложить его на SVN
Ну и чем-же вам не понравилась идея стандартной линковки DLL, нафига вся эта динамическая лабуда (LoadLibrary и т.п.)?
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#17: 2008-01-31 17:08:03 ЛС | профиль | цитата
Народ! А у кого-нибудь это все работает нормально? Может кто сталкивался с проблемой, что с *.dll, INSERT работает нормально, а с *.obj выдает ошибку "database table is locked". На UPDATE и чтение полей работает нормально. Схема одна и та же, только компиляция разная.
Вопрос, как снять защиту блокировки на запись в случае применения *.obj, или почему это может возникать? Этот вопрос возник только что, а схема очень большая, если будет очень необходимо, то попытаюсь ее упростить по сути вопроса и выложить, но может, все же, кто-то с этим сталкивался.
Исследования проводились на версиях sqlite -- sqlite3_2_8.obj, sqlite3_3_4.obj, sqlite3_4_2.obj. Результат один и тот же везде. На версии sqlite3_5_2.obj работоспособность не проверялась (*.obj есть, но не адаптированный).
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#18: 2008-04-12 22:25:07 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 14:25:59
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#19: 2008-04-12 22:25:25 ЛС | профиль | цитата
Вот пример с базой, который при запуске и попытке вставить строку в базу пишет database table is locked, но нормально работает из под *.dll

Я тоже проверял с тем OBJ, что выкладывал tsdima, это который с ключом компиляции -DSQLITE_OBJ
Гость писал(а):
что если базу создал администратор, то простые смертные только читают

А как создать не администраторм, или как туда войти самому администратору
карма: 22

0
файлы: 1example_db_011.zip [1.6KB] [481]
Гость
Ответов: 17029
Рейтинг: 0
#20: 2008-04-12 22:27:52 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 14:25:59
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#21: 2008-04-12 22:28:41 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 14:24:44
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#22: 2008-04-12 22:30:56 ЛС | профиль | цитата
Tad, там *.zip файл example_db_011.zip

А где взять вот этот пример -- Sql2db.sha
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#23: 2008-04-12 22:33:44 ЛС | профиль | цитата
Ушел на hiasm.com увидел. Сейчас скачаю поиграюсь. Минут через 20 (с перекуром) сообщу.
------------ Дoбавленo:

nesco писал(а):
А где взять вот этот пример -- Sql2db.sha
там где Galkov выступал
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#24: 2008-04-12 22:33:55 ЛС | профиль | цитата
Tad, если не будет работать из под obj, попробуй с dll
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#25: 2008-04-12 23:08:16 ЛС | профиль | цитата
Создал вторую таблицу строкой
CREATE TABLE tab2 (id INTEGER PRIMARY KEY AUTOINCREMENT,ico INTEGER NULL,color TEXT ,name TEXT,tel TEXT,adr TEXT)
в tab2 пишет свободно и с obj и с dll. Как ты создавал tab1 пока непойму.
------------ Дoбавленo:

ЗЫ. Да. У меня твой оригинал не работает ни с dll ни с obj
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#26: 2008-04-12 23:12:03 ЛС | профиль | цитата
Tad, я, кажется, нашел, в чем проблема. Если подавать запрос через верхнюю точку, то он выполняется без ошибки, но стоит подать запрос из потока, то получаю database table is locked. Очень странно, но в коды я пока не лез.
Tad писал(а):
Как ты создавал tab1 пока непойму

Это старая таблица, то ли ты ее создавал, то ли Alexbotch, точно не помню
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#27: 2008-04-12 23:21:11 ЛС | профиль | цитата
У меня читается с верхней точки и все равно locked
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#28: 2008-04-12 23:32:09 ЛС | профиль | цитата
Tad писал(а):
У меня читается с верхней точки и все равно locked

Еще один нюанс -- его нельзя совокупировать ни с каким другим запросом перед Insert, все остальные запросы должны идти до него

------------ Дoбавленo:


Вот так это работает нормально


Add(MainForm,14842589,119,126)
{
Left=20
Top=105
Width=319
Height=343
Caption="Example"
Position=1
link(onCreate,944731:doOpen,[])
}
Add(SQLite_Query,3749409,315,140)
{
SQL="Select ico, color, id AS id_30__2, name AS name_100__2, tel, adr from tab1"
link(onQuery,11790623:doMT_Add,[])
link(onColumns,11790623:doMT_AddCols,[])
link(dbHandle,2330233:Var3,[(321,128)(229,128)(229,184)])
}
Add(SQLite_DB,944731,182,140)
{
FileName="test.db"
link(onOpen,11526790:doWork2,[])
}
Add(StringTableMT,11790623,392,91)
{
Width=311
Height=268
ColumnClick=1
AllMT_AddCol=1
ClearAll=0
Flat=1
TableWBreak=0
Grid=0
ColorItems=0
ImgSize=48
AssignedIList=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doAddColumn)
Point(doSort)
Point(onColumnClick)
Point(doMT_Add)
Point(doMT_AddCols)
link(onColumnClick,11790623:doSort,[(436,104)(436,122)(380,122)(380,139)])
}
Add(Button,9628072,133,259)
{
Left=10
Top=280
Caption="Insert"
link(onClick,15037616:doEvent1,[])
}
Add(Hub,15037616,182,259)
{
OutCount=4
link(onEvent1,11790623:doClear,[(303,265)(303,104)])
link(onEvent2,8297447:doQuery,[(268,272)(268,251)])
link(onEvent3,10053100:doExec,[(331,279)(331,293)])
link(onEvent4,11526790:doWork3,[(298,286)])
}
Add(SQLite_Exec,10053100,448,287)
{
link(onError,10736360:doWork2,[])
link(dbHandle,12427273:Var3,[(454,212)])
link(SQL,2830688:FString,[])
}
Add(GetDataEx,2330233,175,175)
{
link(Data,944731:dbHandle,[])
}
Add(Edit,1189168,546,287)
{
Left=70
Top=280
Width=235
Text=""
}
Add(HubEx,11526790,294,133)
{
link(onEvent,3749409:doQuery,[])
}
Add(SQLite_Query,8297447,322,245)
{
SQL="SELECT MAX(id) FROM tab1"
link(onQuery,2830688:doString,[(404,251)(404,230)])
link(onError,10736360:doWork3,[(508,265)])
link(dbHandle,12427273:Var2,[])
}
Add(GetDataEx,12427273,315,203)
{
Angle=3
link(Data,2330233:Var2,[(188,212)])
}
Add(HubEx,10736360,504,280)
{
link(onEvent,1189168:doText,[])
}
Add(FormatStr,2830688,455,224)
{
DataCount=1
Mask="INSERT INTO tab1 VALUES (%1+1,3, '#', 'nesco', '461594', 'Сочи');"
Point(FString)
}

карма: 22

0
Ответов: 16884
Рейтинг: 1239
#29: 2008-04-12 23:39:06 ЛС | профиль | цитата
А я нашел другое. Здесь SELECT MAX(id) FROM tab1 , так как запросы идут последовательно (в старой схеме) просто не хватает ; в конце строки
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#30: 2008-04-13 03:35:58 ЛС | профиль | цитата
Tad писал(а):
не хватает ; в конце строки

Фигня все это, проверил -- по-барабану, ошибка всеравно лезит, а вот так как я сделал -- не лезет.

Похоже, проблема вот здесь


function callback(user:pointer; ncols:integer; values:ppchar; names:ppchar):integer; cdecl;
var dt,ndt:TData;
s:PData;
i:integer;
begin
...
_hi_onEvent_(THISQLite_Query(user)._event_onQuery, dt);
...
end;

Следующая команда (Insert -- на запись) выполняется из незавершенного потока предыдушей (на чтение). Но тут надо бы спецов спросить.


------------ Дoбавленo:


Кому интересно, то выкладываю адаптированную версию sqlite3_4_2.obj. Работает с директивой компилятора
-DSQLITE_OBJ
карма: 22

0
файлы: 1sqliteapi_3_4_2.zip [150.4KB] [443]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)