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
Это можно отнести и к embedded MySQL. А с точки зрения абстрактных интерфейсов подсистемы SqlDB, и, например, нашей Db, вообще никакой разницы. То есть, вашему однопользовательскому приложению будет безразлично, на сервере или на встроенном MySQL хранится база данных.

Автор:  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/