OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 08 Декабрь, 2024 22:36

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




Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Fib - драйвер для Firebird
СообщениеДобавлено: Понедельник, 08 Июнь, 2009 10:32 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Драйвер для 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/


Последний раз редактировалось Штирлиц Четверг, 25 Февраль, 2010 08:38, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 20:17 

Зарегистрирован: Четверг, 06 Апрель, 2006 14:43
Сообщения: 33
Откуда: Россия, Ульяновск
Что-то не работает INSERT. Trap выдает.
Это для каких версий FB и BB?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Вторник, 02 Февраль, 2010 07:21 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Архив обновлен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Вторник, 02 Февраль, 2010 08:04 

Зарегистрирован: Четверг, 06 Апрель, 2006 14:43
Сообщения: 33
Откуда: Россия, Ульяновск
Спасибо! Помогло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 08:16 

Зарегистрирован: Четверг, 06 Апрель, 2006 14:43
Сообщения: 33
Откуда: Россия, Ульяновск
При выполнении следующего кода:
Код:
(*************
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 записей добавить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 14:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Может, там транзакция открыта во время всего добавления? А надо коммитить эти INSERT-ы, чтоб не ели память?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 15:06 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Может попробовать ту же процедуру, через соединение по ODBC, чтоб проверить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 16:11 

Зарегистрирован: Четверг, 06 Апрель, 2006 14:43
Сообщения: 33
Откуда: Россия, Ульяновск
Код:
   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");

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Четверг, 25 Февраль, 2010 08:39 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Архив обновлен. 25.02.2010
db.Commit; можно не делать
по умолчанию драйвер открывается с автокоммитом


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Вторник, 10 Август, 2010 20:28 

Зарегистрирован: Среда, 04 Август, 2010 04:01
Сообщения: 37
Откуда: Сан Хосе, Калифорния, США
Процедура 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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Среда, 11 Август, 2010 04:53 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Поправил.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Драйвер для Firebird
СообщениеДобавлено: Пятница, 13 Август, 2010 01:39 

Зарегистрирован: Среда, 04 Август, 2010 04:01
Сообщения: 37
Откуда: Сан Хосе, Калифорния, США
Спасибо! Работает замечательно!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Пятница, 01 Апрель, 2011 18:54 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Такой вопрос: этот драйвер подходит для встраиваемой версии FB?
Ну и, кто имел опыт демо-использования - просьба поделиться этим самым опытом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Суббота, 02 Апрель, 2011 12:45 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
для работы embed версии, выложенной на сайте FB и ради сохранения оригинального драйвера, пришлось fbembed.dll переименовать в fbclient.dll
тестовый пример вроде отработал


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Суббота, 02 Апрель, 2011 14:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Что-то драйвер трапает при чтении 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]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Суббота, 02 Апрель, 2011 22:35 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Возьмите Fib из SVN


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Воскресенье, 03 Апрель, 2011 10:08 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Вторник, 01 Ноябрь, 2011 13:53 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Здравствуйте.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Fib - драйвер для Firebird
СообщениеДобавлено: Среда, 02 Ноябрь, 2011 10:39 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Попробовал пример начать переделывать под 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 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Kubanych писал(а):
Подключенные модули при линковке тянут за собой много других модулей, какие из них можно заменить для облегчения бинарника?

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

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

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


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

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


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

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


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

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