OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 20 Сентябрь, 2017 05:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: SQLite
СообщениеДобавлено: Воскресенье, 03 Июнь, 2007 13:01 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Использование 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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Четверг, 19 Июнь, 2008 17:41 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 181
Откуда: Austria, Bruck
BB 1.6, Тестовый модуль. При компиляции ругается
Код:
res := SQL.Exec(db, query, Process [incompatible assigment], NIL, NIL);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Четверг, 19 Июнь, 2008 20:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
В 1.6 надо:
Код:
TYPE
  Callback* = PROCEDURE [ccall] (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Пятница, 20 Июнь, 2008 08:25 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 181
Откуда: Austria, Bruck
Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Понедельник, 10 Март, 2014 19:31 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Евгений Темиргалеев писал(а):
В 1.6 надо:
Код:
TYPE
  Callback* = PROCEDURE [ccall] (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER;

Объясните, пожалуйста, значения параметров, или ссылку приведите, где про них прочитать

numcols если не ошибаюсь, количество колонок результата,
values значения

а ptr и names это что?

names могу предположить названия колонок?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Вторник, 11 Март, 2014 08:33 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2907
Откуда: г. Ярославль
adva писал(а):
Евгений Темиргалеев писал(а):
В 1.6 надо:
Код:
TYPE
  Callback* = PROCEDURE [ccall] (ptr: Ptr; numcols: INTEGER; values, names: ArrStr): INTEGER;

Объясните, пожалуйста, значения параметров, или ссылку приведите, где про них прочитать


https://www.sqlite.org/c3ref/exec.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Вторник, 11 Март, 2014 12:37 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Спасибо, все таки зря про ссылку спросил (мало того, что на английском, так еще и С синтаксис, которого вообще не понимаю) . Все таки если по простому расскажете, мне было бы проще вникнуть, а нет, то разберусь наверное, поломав немного моск


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Вторник, 11 Март, 2014 13:08 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2907
Откуда: г. Ярославль
Я уж сам ничего не помню, надо заново перечитывать. Тем более, что мы давно бросили это гиблое дело с SQLite, сосредоточившись на MySQL :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Вторник, 11 Март, 2014 20:27 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Спасибо за ответы,

Но тогда рад буду услышать тезисы о преимуществах mysql

В принципе думаю для моих целей хватило бы sqlite (т.к. по сути нужно хранение данных, и обычные обновления/выборки для однопользовательской программы, без разделения доступа и т.д.).

И почему sqlite оказался гиблым делом ? Менее удобно использовать в КП ? А то может действительно сосредоточусь на mysql


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Вторник, 11 Март, 2014 20:38 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2381
Откуда: Россия, Ярославль
Вы посмотрите вот эту нашу реализацию драйвера http://www.zinnamturm.eu/downloadsOS.htm#SQLite
Там есть модуль Obx, в нем все вообще делается на уровне SqlDB, так что вы можете начать работать на sqlite, а потом переедете бескровно на MySQL, когда запросы вырастут. Язык SQL ведь имеет общее подмножество, которое поддерживают все СуБД.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Вторник, 11 Март, 2014 23:19 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1155
Откуда: Tel-Aviv
Параметр 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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Среда, 12 Март, 2014 04:27 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Понял, спасибо, все таки пока на sqlite остановлюсь, а дальше видно будет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Среда, 12 Март, 2014 12:22 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2907
Откуда: г. Ярославль
Роман М. писал(а):
Цитата:
SQLite:

easier to setup
great for temporary (testing databases)
great for rapid development
great for embedding in an application
Это можно отнести и к embedded MySQL. А с точки зрения абстрактных интерфейсов подсистемы SqlDB, и, например, нашей Db, вообще никакой разницы. То есть, вашему однопользовательскому приложению будет безразлично, на сервере или на встроенном MySQL хранится база данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 17:04 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Что надо сделать, чтобы использовать русские символы для в тексте запроса? Во-первых, SHORTCHAR их не поддерживает, во вторых, пробовал заменить Str на ARRAY OF CHAR, при выполнение запросов возвращается не 0 код ошибки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 17:11 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2381
Откуда: Россия, Ярославль
adva писал(а):
Что надо сделать, чтобы использовать русские символы для в тексте запроса? Во-первых, SHORTCHAR их не поддерживает, во вторых, пробовал заменить Str на ARRAY OF CHAR, при выполнение запросов возвращается не 0 код ошибки.
Используйте конвертацию в UTF8 из SQLiteStrings или SQLiteDriver, в котором конвертация происходит автоматически.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 17:14 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Пётр Кушнир писал(а):
Используйте конвертацию в UTF8 из SQLiteStrings или SQLiteDriver, в котором конвертация происходит автоматически.


Ок, попробую, не разобрался, как в этом случае подключить БД :memory: , а также каких пользователей и пароль использовать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 17:17 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2381
Откуда: Россия, Ярославль
Посмотрите модуль SQLiteObx, там пример работы с драйвером.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 17:54 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Пётр Кушнир писал(а):
Посмотрите модуль SQLiteObx, там пример работы с драйвером.

С него и начал изучать, но присвоил source = ":memory:"
И выдается результат открытия с кодом 7 (вроде как не удалось выделить память).

А без этого драйвера открывалось, просто с русскими символами не работало.

Чего по этому поводу посмотреть? Может строка конвертируется не корректно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 17:58 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 288
Откуда: Россия, Стерлитамак
Да, похоже где-то добавляется текущий каталог блекбокса к пути базы


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQLite
СообщениеДобавлено: Воскресенье, 16 Март, 2014 18:09 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2381
Откуда: Россия, Ярославль
Так и должно быть.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB