lazarus + Firebird embedded

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

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

Сообщение alexs »

Вариант А работает правильно
а вобще синтаксис запроса целиком зависит от SQL сервера. И этот эе запрос должен работать правильно и через BDE.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Всем привет.

выполняю в запросе:

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

AND UPPER(Name) like ''' + UTF8Encode(WideUpperCase(UTF8Decode(st_Name_Str))) + '%'''


заметил глюк. Если у st_Name_Str не четная длина, выдает ошибку: malformed string. С четной длиной и другими комбинациями % работает нормально.

Как это исправить?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

TRSteep писал(а):Здравствуйте!

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

если подключать...

Поборол проблему следующим образом: заполнил свойства TIBConnection.Password и UserName
По какой-то непонятной причине коннект к Firebird НЕ embedded успешно происходил и БЕЗ заполнения этих свойств.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

dunin писал(а):По какой-то непонятной причине коннект к Firebird НЕ embedded успешно происходил и БЕЗ заполнения этих свойств.

ну может под пабликом подключался, может на сервере переменные окружения с паролем есть.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Attid писал(а):ну может под пабликом подключался, может на сервере переменные окружения с паролем есть.

Да вот действительно как-то так... Думал проблему поборол - хер там... На другом компе не работает. Тема такая: виндус, если firebird запущен, то в Лазаре все конектится, если firebird остановлен, то через embeded firebird подконектится в БД не возможно.

Господа, кто знает решение?
Чувствую оно где-то рядом и какая-то мелочь...

Кстати, уже поднималась тема, что Lazars + FireBird embeded = не все так гладко. Нужны дополнительные юниты, которые почему-то не компилятся. Где грабли?

зы. Только пожалуйста не пишем всякую чушь типа "сходи на айбэйс, почитай ридми, проверь куда библиотеки распаковал" и т.д. Проблема не в установке/настройках FB - 100%. Что-то не так с Lazarus
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

у Firebird embedded нет security2.fdb, так что через неё можно кем хочешь коннектиться ^_^

UPD: с помощью транка UIB - соединение проходит совершенно прозрачно... Есть не embedded версия - соединяется через сервер, нет - через встраиваемый вариант. Ещё можно LibraryName указать
//пропустил, чем Вы пользуетесь
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Brainenjii писал(а)://пропустил, чем Вы пользуетесь

tIBConnection

Добавлено спустя 32 минуты 30 секунд:
dunin писал(а):...
Чувствую оно где-то рядом и какая-то мелочь...
...

Вроде, тьфу-тьфу, победил проблему...

Выдержка из README_embedded.txt

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

3. USAGE

  Just copy fbembed.dll, icudt30.dll, icuin30.dll and
  icuuc30.dll into the directory with your application.
  Then rename fbembed.dll to either fbclient.dll or
  gds32.dll depending on your database connectivity software
  ...

Переименовывать надо ТОЛЬКО в fbclient.dll Я, по старой привычке, именовал gds32.dll В таком варианте tIBConnection НЕ работает с Firebird embedded.

WinXP
Lazarus 0.9.28.2
Firebird-2.1.3.18185-0_Win32_embed
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной, в остальных я правлю справочную информацию, используемую в основном запросе. После изменения справочной информации, данные в основном коннекте не обновляются, если не сделать:

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

IBConnection.Close;
IBConnection.Open;

Как правильно в делать в подобных ситуациях?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Ustas писал(а):Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной...

Firebird embedded позволяет создавать несколько коннектов?
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Firebird embedded позволяет создавать несколько коннектов?


Ну, не embedded. И что, тему открывать?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Ustas писал(а):Ну, не embedded. И что, тему открывать?

Ну тада расскажу что знаю... :)

Делается это примерно так:
- в БД создается тригер примерно такого содержания

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

CREATE OR ALTER trigger dialog_event for table
active after insert or update position 2
AS
BEGIN
    POST_EVENT "NEW_MESSAGE";
END

При срабатывании БД генерирует POST_EVENT с определенным именем. А вот это самое "почтовое событие" и должен подхватить тот самый "другой коннект". Дальше все сложнее. В Дельфи (IBX) есть компонент tIBEvents с помощью которого можно можно сообщение от БД отловить, ну и написать соответствующий обработчик (обновить данные). А вот как поймать POST_EVENT штатными средствами Лазаря пока ума не приложу (и даже не пробовал) - скорее всего или придется много всего дописывать или искать подходящие компоненты.

зы. За Лазарус недавно сел. Может как-то и можно...
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

dunin писал(а):Делается это примерно так:

Меня, собственно. интересовал вопрос именно по базе, т.е. какие команды нужно выполнить "другому коннекту", что обновить данные. В программе (она же моя) я обхожусь собственными флагами. А насчет триггеров - я подумывал, что этим вопросом надо бы заняться. Но позже, когда придет время "облизывать" программу. Сейчас бы выстроить скелет...

Аналогичто, сражаюсь с Lasarus + Firebird недавно, переделываю все что было наработано Delphi + BDE... с переменным успехом. :D
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Ustas писал(а):Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной, в остальных я правлю справочную информацию,

Вы что - для каждого запроса создаёте отдельное подключение ? :shock:
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

alexs писал(а):
Ustas писал(а):Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной, в остальных я правлю справочную информацию,

Вы что - для каждого запроса создаёте отдельное подключение ? :shock:


У меня из основной формы (TForm) вызываются другие диалоговые формы со своими данными той же базы. Я не знаю, как все вызываемые формы подключить к одному коннекту. Знаете - подскажите. В Delphi коннект (Session) к DBE виден из любой формы, чем я и пользовался. А здесь - я не знаю...

Добавлено спустя 32 минуты 59 секунд:
dunin писал(а):При срабатывании БД генерирует POST_EVENT с определенным именем....

А вообще, чем можно из Lazarus прочитать событие POST_EVENT, не отловить, а хотя бы тупо, взять и просто посмотреть: "А есть ли событие?". В интернете ничего не нашел, такое впечатление, что там открылся форум теоретиков, разговоров много, а примеров - ни одного.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Обычно достаточно добавить форму в параметрах проекта в автосоздаваемые - и все будет видно.
И, как мен кажется, в последних версиях в транке, даже это ограничение снято.
И ещё - мне кажется что IBConnection для работы с птицей - не лучший вариант. В UIB оно как-то проще. И работа с событиями там хорошо сделана.
Ответить