OberonCore https://forum.oberoncore.ru/ |
|
SQLite https://forum.oberoncore.ru/viewtopic.php?f=5&t=497 |
Страница 1 из 2 |
Автор: | PGR [ Воскресенье, 03 Июнь, 2007 13:01 ] |
Заголовок сообщения: | SQLite |
Использование SQLite из BlackBox. Код: MODULE PgrSQLite ["sqlite3.dll"]; IMPORT SYSTEM; TYPE Ptr*= POINTER TO RECORD [untagged] END; Str* = POINTER TO ARRAY [untagged] OF SHORTCHAR; ArrStr* = POINTER TO ARRAY [untagged] OF Str; Db* = Ptr; Callback* = PROCEDURE (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER; PROCEDURE [ccall] Version* ["sqlite3_libversion"] (): Str; PROCEDURE [ccall] Open* ["sqlite3_open"] (fn: Str; VAR db: Db): INTEGER; PROCEDURE [ccall] Close* ["sqlite3_close"] (db: Db): INTEGER; PROCEDURE [ccall] Exec* ["sqlite3_exec"] (db: Db; query: Str; callback: Callback; ptr: Ptr; VAR [nil] errmsg: Str): INTEGER; END PgrSQLite. Код: MODULE PgrSQLiteTest;
IMPORT SQL := PgrSQLite, Log, SYSTEM; PROCEDURE [ccall] Process (ptr: SQL.Ptr; numcols: INTEGER; values, names: SQL.ArrStr): INTEGER; VAR i: INTEGER; BEGIN FOR i := 0 TO numcols-1 DO Log.String(values[i]$); Log.Tab END; Log.Ln; RETURN 0 END Process; PROCEDURE Create*; VAR s: SQL.Str; db: SQL.Db; res: INTEGER; query: ARRAY 100 OF SHORTCHAR; BEGIN res := SQL.Open("c:\test", db); ASSERT(db # NIL); query := "create table tbl1(one varchar(10), two smallint);"; res := SQL.Exec(db, query, NIL, NIL, NIL); query := "insert into tbl1 values('hello!',10);"; res := SQL.Exec(db, query, NIL, NIL, NIL); query := "insert into tbl1 values('world!',34);"; res := SQL.Exec(db, query, NIL, NIL, NIL); res := SQL.Close(db) END Create; PROCEDURE Select*; VAR s: SQL.Str; db: SQL.Db; res: INTEGER; query: ARRAY 100 OF SHORTCHAR; BEGIN res := SQL.Open("c:\test", db); ASSERT(db # NIL); query := "select * from tbl1;"; res := SQL.Exec(db, query, Process, NIL, NIL); res := SQL.Close(db) END Select; END PgrSQLiteTest. |
Автор: | hothing [ Четверг, 19 Июнь, 2008 17:41 ] |
Заголовок сообщения: | Re: SQLite |
BB 1.6, Тестовый модуль. При компиляции ругается Код: res := SQL.Exec(db, query, Process [incompatible assigment], NIL, NIL);
|
Автор: | Евгений Темиргалеев [ Четверг, 19 Июнь, 2008 20:22 ] |
Заголовок сообщения: | Re: SQLite |
В 1.6 надо: Код: TYPE
Callback* = PROCEDURE [ccall] (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER; |
Автор: | hothing [ Пятница, 20 Июнь, 2008 08:25 ] |
Заголовок сообщения: | Re: SQLite |
Спасибо |
Автор: | adva [ Понедельник, 10 Март, 2014 19:31 ] |
Заголовок сообщения: | Re: SQLite |
Евгений Темиргалеев писал(а): В 1.6 надо: Код: TYPE Callback* = PROCEDURE [ccall] (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER; Объясните, пожалуйста, значения параметров, или ссылку приведите, где про них прочитать numcols если не ошибаюсь, количество колонок результата, values значения а ptr и names это что? names могу предположить названия колонок? |
Автор: | Иван Кузьмицкий [ Вторник, 11 Март, 2014 08:33 ] |
Заголовок сообщения: | Re: SQLite |
adva писал(а): Евгений Темиргалеев писал(а): В 1.6 надо: Код: TYPE Callback* = PROCEDURE [ccall] (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER; Объясните, пожалуйста, значения параметров, или ссылку приведите, где про них прочитать https://www.sqlite.org/c3ref/exec.html |
Автор: | adva [ Вторник, 11 Март, 2014 12:37 ] |
Заголовок сообщения: | Re: SQLite |
Спасибо, все таки зря про ссылку спросил (мало того, что на английском, так еще и С синтаксис, которого вообще не понимаю) . Все таки если по простому расскажете, мне было бы проще вникнуть, а нет, то разберусь наверное, поломав немного моск |
Автор: | Иван Кузьмицкий [ Вторник, 11 Март, 2014 13:08 ] |
Заголовок сообщения: | Re: SQLite |
Я уж сам ничего не помню, надо заново перечитывать. Тем более, что мы давно бросили это гиблое дело с SQLite, сосредоточившись на MySQL |
Автор: | adva [ Вторник, 11 Март, 2014 20:27 ] |
Заголовок сообщения: | Re: SQLite |
Спасибо за ответы, Но тогда рад буду услышать тезисы о преимуществах mysql В принципе думаю для моих целей хватило бы sqlite (т.к. по сути нужно хранение данных, и обычные обновления/выборки для однопользовательской программы, без разделения доступа и т.д.). И почему sqlite оказался гиблым делом ? Менее удобно использовать в КП ? А то может действительно сосредоточусь на mysql |
Автор: | Пётр Кушнир [ Вторник, 11 Март, 2014 20:38 ] |
Заголовок сообщения: | Re: SQLite |
Вы посмотрите вот эту нашу реализацию драйвера http://www.zinnamturm.eu/downloadsOS.htm#SQLite Там есть модуль Obx, в нем все вообще делается на уровне SqlDB, так что вы можете начать работать на sqlite, а потом переедете бескровно на MySQL, когда запросы вырастут. Язык SQL ведь имеет общее подмножество, которое поддерживают все СуБД. |
Автор: | Роман М. [ Вторник, 11 Март, 2014 23:19 ] |
Заголовок сообщения: | Re: SQLite |
Параметр ptr используется лишь тогда, когда нужно передать какие-то данные внутрь функции обратного вызова. Если не нужно передавать, тогда установить его значение в NIL. В http://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm смотри пример "SELECT Operation". Объявление в С "void *data" имеет в КП аналог "data: POINTER TO RECORD [untagged] END". Appropriate Uses For SQLite http://stackoverflow.com/a/3632/2840001 Цитата: SQLite:
easier to setup great for temporary (testing databases) great for rapid development great for embedding in an application doesn't have user management doesn't have many performance features doesn't scale well. MySQL: far more difficult/complex to set up better options for performance tuning can scale well if tuned properly can manage users, permissions, etc. |
Автор: | adva [ Среда, 12 Март, 2014 04:27 ] |
Заголовок сообщения: | Re: SQLite |
Понял, спасибо, все таки пока на sqlite остановлюсь, а дальше видно будет |
Автор: | Иван Кузьмицкий [ Среда, 12 Март, 2014 12:22 ] |
Заголовок сообщения: | Re: SQLite |
Роман М. писал(а): Цитата: SQLite: easier to setup great for temporary (testing databases) great for rapid development great for embedding in an application |
Автор: | adva [ Воскресенье, 16 Март, 2014 17:04 ] |
Заголовок сообщения: | Re: SQLite |
Что надо сделать, чтобы использовать русские символы для в тексте запроса? Во-первых, SHORTCHAR их не поддерживает, во вторых, пробовал заменить Str на ARRAY OF CHAR, при выполнение запросов возвращается не 0 код ошибки. |
Автор: | Пётр Кушнир [ Воскресенье, 16 Март, 2014 17:11 ] |
Заголовок сообщения: | Re: SQLite |
adva писал(а): Что надо сделать, чтобы использовать русские символы для в тексте запроса? Во-первых, SHORTCHAR их не поддерживает, во вторых, пробовал заменить Str на ARRAY OF CHAR, при выполнение запросов возвращается не 0 код ошибки. Используйте конвертацию в UTF8 из SQLiteStrings или SQLiteDriver, в котором конвертация происходит автоматически.
|
Автор: | adva [ Воскресенье, 16 Март, 2014 17:14 ] |
Заголовок сообщения: | Re: SQLite |
Пётр Кушнир писал(а): Используйте конвертацию в UTF8 из SQLiteStrings или SQLiteDriver, в котором конвертация происходит автоматически. Ок, попробую, не разобрался, как в этом случае подключить БД :memory: , а также каких пользователей и пароль использовать |
Автор: | Пётр Кушнир [ Воскресенье, 16 Март, 2014 17:17 ] |
Заголовок сообщения: | Re: SQLite |
Посмотрите модуль SQLiteObx, там пример работы с драйвером. |
Автор: | adva [ Воскресенье, 16 Март, 2014 17:54 ] |
Заголовок сообщения: | Re: SQLite |
Пётр Кушнир писал(а): Посмотрите модуль SQLiteObx, там пример работы с драйвером. С него и начал изучать, но присвоил source = ":memory:" И выдается результат открытия с кодом 7 (вроде как не удалось выделить память). А без этого драйвера открывалось, просто с русскими символами не работало. Чего по этому поводу посмотреть? Может строка конвертируется не корректно? |
Автор: | adva [ Воскресенье, 16 Март, 2014 17:58 ] |
Заголовок сообщения: | Re: SQLite |
Да, похоже где-то добавляется текущий каталог блекбокса к пути базы |
Автор: | Пётр Кушнир [ Воскресенье, 16 Март, 2014 18:09 ] |
Заголовок сообщения: | Re: SQLite |
Так и должно быть. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |