OberonCore
https://forum.oberoncore.ru/

Fib - драйвер для Firebird
https://forum.oberoncore.ru/viewtopic.php?f=90&t=1648
Страница 1 из 3

Автор:  Штирлиц [ Понедельник, 08 Июнь, 2009 10:32 ]
Заголовок сообщения:  Fib - драйвер для Firebird

Драйвер для Firebird

Пример id = "lc_ctype=WIN1251;user_name=SYSDBA;password=masterkey"
в SqlDB.OpenDatabase(protocol, id, password, datasource, SqlDB.sync, SqlDB.showErrors, db, res);
password - игнорируется, задается в id.

Работа с ARRAY Firebird пока не реализована.

[Модератор] c 22.10.2010 размещён: http://oberoncore.ru/bbcc/subs/fib/

Автор:  GlSal [ Понедельник, 01 Февраль, 2010 20:17 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Что-то не работает INSERT. Trap выдает.
Это для каких версий FB и BB?

Автор:  Штирлиц [ Вторник, 02 Февраль, 2010 07:21 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Архив обновлен.

Автор:  GlSal [ Вторник, 02 Февраль, 2010 08:04 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Спасибо! Помогло.

Автор:  GlSal [ Понедельник, 22 Февраль, 2010 08:16 ]
Заголовок сообщения:  Re: Драйвер для Firebird

При выполнении следующего кода:
Код:
(*************
SET SQL DIALECT 3;
SET NAMES WIN1251;
SET CLIENTLIB 'C:\WINDOWS\system32\FBCLIENT.DLL';

CREATE DATABASE 'D:\t.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;

CREATE TABLE T (
    F  INTEGER
);
***************)

MODULE  DbtstT;
   IMPORT  Log := StdLog, SqlDB, FibDriver, Strings;
   
   CONST
      protocol = "FibDriver";
      id = "lc_ctype=WIN1251;user_name=SYSDBA;password=masterkey"; password = "masterkey";
      datasource = "D:\T.FDB";
   
   PROCEDURE Tst*;
      VAR  db: SqlDB.Database; res,  i: INTEGER;
         si: ARRAY 10 OF CHAR;
   BEGIN
      SqlDB.OpenDatabase(protocol, id, password, datasource, SqlDB.sync, SqlDB.showErrors, db, res);
      IF  res = 0  THEN
         Log.String('Open Base');
      ELSE
         Log.String('Error open Base = '); Log.Int(res);
         RETURN ;
      END;
      FOR  i := 1 TO 50000  DO
         Strings.IntToString(i, si);
         db.Exec("INSERT INTO T (F)  VALUES (" + si + ") ");
      END;
   END Tst;
   
END DbtstT.


сервер (FB 2.1) съедает 2500 МБ памяти и начинает выдавать ошибку:
Цитата:
FibDriver# Error:Unsuccessful execution caused by an unavailable resource. 0AX unable to allocate memory from operating system


Пробывал на разных компьютерах -- от физической памяти не зависит.

А мне бы вообще надо 2000000 записей добавить.

Автор:  Илья Ермаков [ Понедельник, 22 Февраль, 2010 14:36 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Может, там транзакция открыта во время всего добавления? А надо коммитить эти INSERT-ы, чтоб не ели память?

Автор:  Axcel [ Понедельник, 22 Февраль, 2010 15:06 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Может попробовать ту же процедуру, через соединение по ODBC, чтоб проверить?

Автор:  GlSal [ Понедельник, 22 Февраль, 2010 16:11 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Код:
   Strings.IntToString(i, si);
   db.Exec("INSERT INTO T (F)  VALUES (" + si + ") ");
   db.Commit;

и
Код:
   Strings.IntToString(i, si);
   db.Exec("INSERT INTO T (F)  VALUES (" + si + ") ");
   db.Exec("COMMIT RETAIN");

то же самое

Код:
   Strings.IntToString(i, si);
   db.Exec("INSERT INTO T (F)  VALUES (" + si + ") ");
   db.Exec("COMMIT");

то же, но медленнее

Автор:  Штирлиц [ Четверг, 25 Февраль, 2010 08:39 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Архив обновлен. 25.02.2010
db.Commit; можно не делать
по умолчанию драйвер открывается с автокоммитом

Автор:  nail_kh [ Вторник, 10 Август, 2010 20:28 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Процедура FibDriver.Table.ReadName при попытке прочесть заголовки колонок выдает ошибку index out of range на строке
Код:
     ...
     xsqlvar := S.VAL(FibApi.PtrXSQLVAR, S.ADR(xsqlda.sqlvar[column]));
     ...


Причина похоже в том, что в типе FibApi.XSQLDA поле sqlvar определено как
ARRAY [untagged] 1 OF FibApi.XSQLVAR
Соответственно при column>0 срабатывает проверка выхода индекса за границы массива.

Фрагмент кода выдающего ошибку:

Код:
PROCEDURE Tst*;
      VAR db: SqlDB.Database; res, i,n: INTEGER;
      si: ARRAY 10 OF CHAR;
      tb:SqlDB.Table;
      r:SqlDB.Row;
BEGIN
   SqlDB.OpenDatabase(protocol, id, password, datasource, SqlDB.sync, SqlDB.showErrors, db, res);
   IF res = 0 THEN
     Log.String('Open Base');
    ELSE
    Log.String('Error open Base = '); Log.Int(res);
    RETURN ;
    END;
    tb:=db.NewTable();
    tb.Exec("SELECT * FROM COUNTRY");
 
    tb.Read(SqlDB.names,r);
    FOR n:=0 TO LEN(r.fields)-1 DO
    Log.String(r.fields[n]); Log.String(" ")
    END; Log.Ln;
END Tst;

Автор:  Штирлиц [ Среда, 11 Август, 2010 04:53 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Поправил.

Обновлен архив 11.08.2010

[Модератор] с 22.10.2010 размещён: http://oberoncore.ru/bbcc/subs/fib/

Автор:  nail_kh [ Пятница, 13 Август, 2010 01:39 ]
Заголовок сообщения:  Re: Драйвер для Firebird

Спасибо! Работает замечательно!

Автор:  Пётр Кушнир [ Пятница, 01 Апрель, 2011 18:54 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

Такой вопрос: этот драйвер подходит для встраиваемой версии FB?
Ну и, кто имел опыт демо-использования - просьба поделиться этим самым опытом.

Автор:  Пётр Кушнир [ Суббота, 02 Апрель, 2011 12:45 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

для работы embed версии, выложенной на сайте FB и ради сохранения оригинального драйвера, пришлось fbembed.dll переименовать в fbclient.dll
тестовый пример вроде отработал

Автор:  Иван Кузьмицкий [ Суббота, 02 Апрель, 2011 14:46 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

Что-то драйвер трапает при чтении 1000-й строки из тестовой таблицы с 2000 строками. Причём, table.rows показывает 2000 строк. Меньше 1000 - читает нормально. Больше - нет.

Цитата:
index out of range

FibDriver.Table.Fetch [00002CDDH]
.i INTEGER 1000
.res INTEGER 0
.row INTEGER 1000
.t FibDriver.Table [015D4990H]
.xsqlda POINTER [017C9CB0H]

Автор:  Штирлиц [ Суббота, 02 Апрель, 2011 22:35 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

Возьмите Fib из SVN

Автор:  Пётр Кушнир [ Воскресенье, 03 Апрель, 2011 10:08 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

она оттуда и есть, а, там уже обновлённое!
Спс.

Автор:  Kubanych [ Вторник, 01 Ноябрь, 2011 13:53 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

Здравствуйте.

Никто не пробовал использовать этот драйвер в Linux?

С уважением, Кубаныч.

Автор:  Kubanych [ Среда, 02 Ноябрь, 2011 10:39 ]
Заголовок сообщения:  Re: Fib - драйвер для Firebird

Попробовал пример начать переделывать под Linux.

Код:
(*************
SET SQL DIALECT 3;
SET NAMES WIN1251;

CREATE DATABASE '/home/bbweb/T.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;

CREATE TABLE T (
    F  INTEGER
);
***************)

MODULE  DbtstT;
   IMPORT  Log, LinSimpleLog, SqlDB, FibDriver, Strings;
   
   CONST
      protocol = "FibDriver";
      id = "lc_ctype=WIN1251;user_name=SYSDBA;password=masterkey"; password = "masterkey";
      datasource = "/home/bbweb/T.FDB";
   
   PROCEDURE Test*;
      VAR  db: SqlDB.Database; res,  i: INTEGER;
         si: ARRAY 10 OF CHAR;
   BEGIN

      SqlDB.OpenDatabase(protocol, id, password, datasource, SqlDB.sync, SqlDB.showErrors, db, res);
      IF  res = 0  THEN
         Log.String('Open Base');
      ELSE
         Log.String('Error open Base = '); Log.Int(res);
         RETURN ;
      END;
      FOR  i := 1 TO 50  DO
         Strings.IntToString(i, si);
         db.Exec("INSERT INTO T (F)  VALUES (" + si + ") ");
      END;
   END Test;
   
   PROCEDURE Init*;
   BEGIN
      LinSimpleLog.Open;
      Test;

   END Init;

END DbtstT.


DbtstT.Test

   Линковка
DevElfLinker.LinkDll libBBFB.so := Kernel+ Log Math Strings LinSimpleLog

Dates Files Services Dialog Fonts Ports Stores Sequencers Models Meta Converters Views
Controllers Properties Mechanisms Containers

Printers Printing Documents Windows StdDialog StdApi StdCmds  HostFiles
HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows
HostPrinters StdCFrames HostCFrames HostDialog HostClipboard HostCmds
SqlDrivers SqlDB FibApi FibMisc FibErrors FibDriver

DbtstT#


В FibDriver заменил StdLog на Log.

Надо будет, наверное, удалить из FibApi вызовы WinApi, переделав динамическую загрузку dll/.so на статическую
с переключалкой в исходном коде для Win/Lin, чтобы получить межплатформенный вариант.

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

Кроме того, линковка до конца не идет, выдается вообщение

Kernel.mainWnd not found (imported from HostWindows)

Автор:  Евгений Темиргалеев [ Среда, 02 Ноябрь, 2011 11:26 ]
Заголовок сообщения:  Re: Разработка динамических сайтов в Blackbox

Kubanych писал(а):
Подключенные модули при линковке тянут за собой много других модулей, какие из них можно заменить для облегчения бинарника?

Кроме того, линковка до конца не идет, выдается вообщение

Kernel.mainWnd not found (imported from HostWindows)
Почему нет? Kernel линуховый, HostWindows виндовый.

Нужно доработать драйвер так, чтобы он не лез куда не надо. Исходя из здравого смысла, гуйно-завязанные части для его работы не нужны.

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/