lazarus + Firebird embedded
Модератор: Модераторы
Всем привет.
выполняю в запросе:
заметил глюк. Если у st_Name_Str не четная длина, выдает ошибку: malformed string. С четной длиной и другими комбинациями % работает нормально.
Как это исправить?
выполняю в запросе:
Код: Выделить всё
AND UPPER(Name) like ''' + UTF8Encode(WideUpperCase(UTF8Decode(st_Name_Str))) + '%'''заметил глюк. Если у st_Name_Str не четная длина, выдает ошибку: malformed string. С четной длиной и другими комбинациями % работает нормально.
Как это исправить?
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
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
- Контактная информация:
dunin писал(а):По какой-то непонятной причине коннект к Firebird НЕ embedded успешно происходил и БЕЗ заполнения этих свойств.
ну может под пабликом подключался, может на сервере переменные окружения с паролем есть.
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
Attid писал(а):ну может под пабликом подключался, может на сервере переменные окружения с паролем есть.
Да вот действительно как-то так... Думал проблему поборол - хер там... На другом компе не работает. Тема такая: виндус, если firebird запущен, то в Лазаре все конектится, если firebird остановлен, то через embeded firebird подконектится в БД не возможно.
Господа, кто знает решение?
Чувствую оно где-то рядом и какая-то мелочь...
Кстати, уже поднималась тема, что Lazars + FireBird embeded = не все так гладко. Нужны дополнительные юниты, которые почему-то не компилятся. Где грабли?
зы. Только пожалуйста не пишем всякую чушь типа "сходи на айбэйс, почитай ридми, проверь куда библиотеки распаковал" и т.д. Проблема не в установке/настройках FB - 100%. Что-то не так с Lazarus
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
у Firebird embedded нет security2.fdb, так что через неё можно кем хочешь коннектиться ^_^
UPD: с помощью транка UIB - соединение проходит совершенно прозрачно... Есть не embedded версия - соединяется через сервер, нет - через встраиваемый вариант. Ещё можно LibraryName указать
//пропустил, чем Вы пользуетесь
UPD: с помощью транка UIB - соединение проходит совершенно прозрачно... Есть не embedded версия - соединяется через сервер, нет - через встраиваемый вариант. Ещё можно LibraryName указать
//пропустил, чем Вы пользуетесь
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
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
Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной, в остальных я правлю справочную информацию, используемую в основном запросе. После изменения справочной информации, данные в основном коннекте не обновляются, если не сделать:
Как правильно в делать в подобных ситуациях?
Код: Выделить всё
IBConnection.Close;
IBConnection.Open;
Как правильно в делать в подобных ситуациях?
Firebird embedded позволяет создавать несколько коннектов?
Ну, не embedded. И что, тему открывать?
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
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 штатными средствами Лазаря пока ума не приложу (и даже не пробовал) - скорее всего или придется много всего дописывать или искать подходящие компоненты.
зы. За Лазарус недавно сел. Может как-то и можно...
dunin писал(а):Делается это примерно так:
Меня, собственно. интересовал вопрос именно по базе, т.е. какие команды нужно выполнить "другому коннекту", что обновить данные. В программе (она же моя) я обхожусь собственными флагами. А насчет триггеров - я подумывал, что этим вопросом надо бы заняться. Но позже, когда придет время "облизывать" программу. Сейчас бы выстроить скелет...
Аналогичто, сражаюсь с Lasarus + Firebird недавно, переделываю все что было наработано Delphi + BDE... с переменным успехом.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Ustas писал(а):Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной, в остальных я правлю справочную информацию,
Вы что - для каждого запроса создаёте отдельное подключение ?
alexs писал(а):Ustas писал(а):Изменяю базу из разных форм приложения, т.е. у меня несколько коннектов (IBConnection) к базе: один, как бы основной, в остальных я правлю справочную информацию,
Вы что - для каждого запроса создаёте отдельное подключение ?
У меня из основной формы (TForm) вызываются другие диалоговые формы со своими данными той же базы. Я не знаю, как все вызываемые формы подключить к одному коннекту. Знаете - подскажите. В Delphi коннект (Session) к DBE виден из любой формы, чем я и пользовался. А здесь - я не знаю...
Добавлено спустя 32 минуты 59 секунд:
dunin писал(а):При срабатывании БД генерирует POST_EVENT с определенным именем....
А вообще, чем можно из Lazarus прочитать событие POST_EVENT, не отловить, а хотя бы тупо, взять и просто посмотреть: "А есть ли событие?". В интернете ничего не нашел, такое впечатление, что там открылся форум теоретиков, разговоров много, а примеров - ни одного.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Обычно достаточно добавить форму в параметрах проекта в автосоздаваемые - и все будет видно.
И, как мен кажется, в последних версиях в транке, даже это ограничение снято.
И ещё - мне кажется что IBConnection для работы с птицей - не лучший вариант. В UIB оно как-то проще. И работа с событиями там хорошо сделана.
И, как мен кажется, в последних версиях в транке, даже это ограничение снято.
И ещё - мне кажется что IBConnection для работы с птицей - не лучший вариант. В UIB оно как-то проще. И работа с событиями там хорошо сделана.
