lazarus + Firebird embedded

Модератор: Модераторы

TRSteep
незнакомец
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

lazarus + Firebird embedded

Сообщение TRSteep »

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

Задача
Пытаюсь объединить lazarus и Firebird, причем Firebird embedded

если подключать lazarus к Firebird серверу на другом компе делаю это так:
DBGrid - таблица, указываю Datasource, как Datasource :)
в Datasource указываю SQLQuery, как DataSet
в SQLQuery указываю IBConnection, как Database
в IBConnection указываю:
HostName - ip сервера: 192.168.11.128
DatabaseName - путь к базе данных: C:\base\EMPLOYEE.FDB
Connected - true
все работает!

Но если пытаюсь запустить как embedded - копирую все файлы по инструкции (README_embedded)

ip не указываю
путь указываю (C:\base\EMPLOYEE.FDB)

пишет: unavaible database

если указать ip (localhost или 127.0.0.1) то выходит сообщение с крестиком (пустое)

что можно сделать?

PS: Firebird-2.5.0.23247-1_Win32_embed_Beta1.zip

Добавлено спустя 15 часов 31 минуту 44 секунды:
может есть у кого простенький пример использования firebird embedded (на Lazarus или Delphi)?
Последний раз редактировалось TRSteep 03.06.2009 11:23:52, всего редактировалось 1 раз.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

попробуй другие компоненты например UIB
TRSteep
незнакомец
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

Сообщение TRSteep »

пытался использовать UIB 2.1

скачал, поместил в папку components UIB исходники его
патаюсь по инструкции скомпилировать lpk файл

выдает ошибку:
C:\lazarus\components\my\UIB21\source\jvuiblib.pas(4467,27) Error: Can't determine which overloaded function to call

в строке:
SQL_TIMESTAMP : EncodeTimeStamp(Value, PISCTimeStamp(sqldata));

файл: jvuiblib

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

Затем попытался установить Fblib

выдает ошибку:
C:\lazarus\components\my\fblib 0.85\FBLDataset.pas(184,21) Error: No member is provided to access property

в строке:
IsUniDirectional := True;


а ZEOS вроде нормально поставились - попробую еще

PS почти все компоненты поддерживают максимум 2.0... - неужели не развиваются?

PPS попробовал Delphi + FIBlib - embedded работает :) теперь бы еще саму базу создать - но эта уже другая история - все таки хотелось бы с лазарем разобраться....
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

TRSteep писал(а):файл: jvuiblib

Судя по этому имени модуля - у вас ОЧЕНЬ древняя версия uib
в своё время автор оказался от именования модулей библиотек в стили JVCL - сечас они идут без приставки jv.
А свежую версию - скачайте с сайта UIB - а ещё лучше из SVN
https://uib.svn.sourceforge.net/svnroot/uib/trunk
это адрес текущего репозитария
Аватара пользователя
GN
новенький
Сообщения: 67
Зарегистрирован: 29.07.2007 07:35:56
Откуда: Казахстан
Контактная информация:

Сообщение GN »

lazarus + firebird embedded step by step project (`Hello World tutorial`) //Win32 - http://voicixs.com/archives/198
lexa_bear
незнакомец
Сообщения: 1
Зарегистрирован: 07.06.2009 07:24:35

Сообщение lexa_bear »

Вчера скачал Lazarus, поставил - решил испытать. Firebird сервер, НЕ embedded.
Путь к базе содержит папки, именованные русскими буквами. Lazarus ругается такой же пустой ошибкой.
Что, TIBConnection не понимает русских символов в Databasename?
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

lexa_bear писал(а):Что, TIBConnection не понимает русских символов в Databasename?

Если версия Lazarus > 0.9.26, то в IDE русские буквы вводятся в кодировке UTF8, которую fbclient.dll не понимает.
Если очень надо, чтобы база лежала в путях с русскими буквами, воспользуйтесь файликом aliases.conf в папке firebird, и впишите туда что-то вроде

Код: Выделить всё

mybase1=C:\ПутьКМоейБазе\База.fdb

а в IBConnection.Databasename напишите mybase1
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

либо приведите строку подключения из UTF8 к системной.
TRSteep
незнакомец
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

Сообщение TRSteep »

Вобщем скачал последнюю версию ZEOS и подключал по мануалу(lazarus + firebird embedded step by step project (`Hello World tutorial`) //Win32)
вроде сработало...
нужно проверить на чистой машинке :)

Вот только вопрос возник как я понял в файрберд автоинкрементальных полей нет
и заменяют их генераторы и триггеры

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

Код: Выделить всё

CREATE TABLE Category (
       ID_Category          INTEGER NOT NULL,
       Name_Category        VARCHAR(100) NOT NULL,
       Desc_Category        VARCHAR(255)
);


ALTER TABLE Category
       ADD PRIMARY KEY (ID_Category);


CREATE TABLE Program (
       ID_Program           INTEGER NOT NULL,
       Name_Program         VARCHAR(100) NOT NULL,
       Version              VARCHAR(50),
       PathToInstall        VARCHAR(255),
       PathToRun            VARCHAR(255),
       Description          VARCHAR(255),
       ID_Category          INTEGER NOT NULL
);


ALTER TABLE Program
       ADD PRIMARY KEY (ID_Program, ID_Category);


ALTER TABLE Program
       ADD FOREIGN KEY (ID_Category)
                             REFERENCES Category;


Используя IB_Expert создаю генераторы:

Код: Выделить всё

GEN_ID_PROGRAM
GEN_ID_CATEGORY


Создаю триггер на событие BEFORE INSERT для каждой таблицы

Код: Выделить всё

AS
begin
    if (NEW.ID_CATEGORY is NULL) then
    NEW.ID_CATEGORY = GEN_ID(GEN_ID_CATEGORY, 1);
end


Код: Выделить всё

AS
begin
  if (NEW.ID_PROGRAM is NULL) then
  NEW.ID_PROGRAM = GEN_ID(GEN_ID_PROGRAM, 1);
end


При добавлении данных во вкладке данные таблице в эксперте - все срабатывает ID даются нормально, НО
пытаюсь в программе добавление данных:

Код: Выделить всё

ZQuery.Close;
ZQuery.SQL.Clear;
ZQuery.SQL.Text := 'INSERT INTO category(NAME_CATEGORY) VALUES(:Category)';

ZQuery.FieldByName('Category').AsString := 'Internet';
ZQuery.Post;


выдает ошибку о том что добавление данных невозможно, тк идентификатор ID_CATEGORY не может быть NULL
PS точно не скажу пока что пишет пока. И еще попробую завтра на чистой машине...
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

на сайте www.ibase.ru почитай про это. Там разжовано хорошо.
А вобще не знаю как Zeos - а FBDataSet умеет сам подвязывать генератор к первичному ключу.
TRSteep
незнакомец
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

Сообщение TRSteep »

как оказалось насчет генератора сделал все правильно, только тригеры создавал с экспериментальной базой, а в программе подключал обычную :)

насчет embedded
в виртуалке запускаю программу(из сетевой папки) - выдает сообщение о нехватке dll
скопировал fbclientd.dll в папку с программой
опять запускаю - выдает сообщение:

SQL Error: Unable to complite network request to host "H". Failed to lacate host mashine.
The Specifed name was not found in the host file or Domain Name Services.
Error Code: -902 cann't format message 13:98 - message file
\\Soprano\firebird.msg not found


скопировал файл firebird.msg - не помогло

строка подключения:

Код: Выделить всё

BasePath := ExtractFilePath(Application.EXEName)+'SDSI.FDB';
//Подключение
ZConnection.HostName:=''; // Hostname must be blank for embedded server projects
ZConnection.Database := BasePath;
ZConnection.Connect;  // open connection

Сама программа на основном компе находится на диске H, но откуда он берет букву диска в ошибке не пойму...
Неужели текущая папка не определяется как сетевая?

запускаю программу из сетевой папки \\Soprano\TestNoBD (поэтому и не понимаю почему он пытается загрузить из \\Soprano\firebird.msg)
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

TRSteep
это проблемы птички а не лазаруса.

читай справку по птичке и устанавливай переменую среду где искать msg файл

Добавлено спустя 2 минуты 42 секунды:
TRSteep писал(а):Сама программа на основном компе находится на диске H, но откуда он берет букву диска в ошибке не пойму...

он думает что H это имя удаленного компьютера. думаю что это ошибка компонента, смотри исходники
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Написал SELECT в котором используется CASE. В IBExpert SELECT работает, а в Lazarus - нет. Пользуюсь компонентом TSQLQuery из закладки SQLdb. В чем причина? В TSQLQuery язык ограничен? А чем пользоваться?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Ustas писал(а):А чем пользоваться?

UIB + AlexDataset

Добавлено спустя 51 секунду:
хотя от ошибки завит, может хватит отключить prepare , но уиб все равно лучше.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Может я чего не догоняю... В базе таблицы Т1, Т2, Т3. На основе данных SELECT (TSQLQuery) по Т1 я изменяю (хочу только) Т2 и Т3. Но после первого же .ExecSQL по Т2, данные SELECT по Т1 не доступны. Что после изменения в базе все активные TSQLQuery закрываются?
Ответить