Консультация № 185555
07.03.2012, 13:28
100.00 руб.
0 13 1
Здравствуйте, уважаемые эксперты! Есть проект "клиент-сервер" на Delphi-7 / FireBird с использованием IBX-компонентов (без внешних библиотек), одновременно работает 10-15 человек. Нужно (если это возможно, конечно) перевести его на Lazarus / FireBird. Операционные системы: WinXP, Win-7.

Просьба к тем, кто создавал такие проекты на Lazarus/FireBird. Требуется элементарный работающий и проверенный пример такой связки с исходными текстами.
Спасибо.

Обсуждение

давно
Старший Модератор
31795
6196
07.03.2012, 14:57
общий
07.03.2012, 15:00
Цитата: перенесено из формы ответа
Здравствуйте, lamed!
Что должен уметь клиент? Попробую тебе связать
Консультировал: Посетитель - 392683 (1-й класс)

Уточняющие вопросы.
В платных консультациях - это недопустимо.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
07.03.2012, 15:57
общий
Цитата: 17410
Здравствуйте, lamed!
FireBird без проблем подменяет Interbase просто созданием копии файла fbclient.dll под именем gds32.dll
C Lazarus' ом сложнее. Но насколько я помню он мог собирать код фреймфорка KOL. Возможно Вам будет проще будет переводить поэтапно - сначала на KOL под Delphi, а потом уже KOL под Lazarus.

Ответ не соответствует вопросу.
давно
Мастер-Эксперт
425
4118
08.03.2012, 18:50
общий
08.03.2012, 18:53
Адресаты:
Я могу предложить Вам два варианта:
1. С использованием уже имеющихся компонентов доступа к БД в самом Lazarus.
Преимущества: компоненты не надо ниоткуда скачивать и устанавливать.
Недостатки: В связи с тем, что компоненты очень просты, в них нет некоторых возможностей автоматизации, как это было в IBX-компонентах Delphi. Нельзя сказать, что это большой недостаток, но после Delphi это может вызвать небольшие затруднения.
2. С использованием сторонних компонентов ZEOS.
Преимущества: полный аналог компонентов BDE Delphi, но без использования сторонних библиотек (естественно, клиентские библиотеки FireBird нужны ). В связи с этим, их использование, после работы в Delphi, не вызывает никаких затруднений.
Недостатки: могут быть некоторые проблемы с последней версией FireBird (но не обязательно ).

Если Вам не трудно, опишите, какой должен быть функционал в программе-примере и я Вам сделаю.
И ещё вопрос: кодировка текстов в БД какая?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Академик
320937
2216
08.03.2012, 19:18
общий
Адресаты:
Добрый вечер, sir Henry! Спасибо, что откликнулись. Прочел Ваш пост только что. В связи с некоторыми обстоятельствамине смогу подготовить пример сегодня, а только завтра во второй половине дня. Можно ли немного продлить консультацию?
Спасибо.
давно
Мастер-Эксперт
425
4118
08.03.2012, 19:29
общий
Адресаты:
Цитата: lamed
Можно ли немного продлить консультацию?

Можно.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Академик
320937
2216
09.03.2012, 16:04
общий
Адресаты:
Добрый день, sir Henry!
1. База FireBird 2.5 / Win1251. INSTITUTE.ZIP (53.5 кб)
2. Скрипт создания базы (на всякий случай) sql.zip (2.5 кб)
3. Проект Delphi-7. Prg.zip (17.0 кб)
Если возможно - две формы: список сотрудников и редактирование сотрудника. ZEOS, если можно, не используем (в рамках этой консультации).
Заранее спасибо.
давно
Мастер-Эксперт
425
4118
09.03.2012, 17:05
общий
Адресаты:
Цитата: lamed
ZEOS, если можно, не используем

Хорошо. Тогда сделаю так:
1. Компоненты доступа к БД - SQLDb;
2. Список сотрудников - сетка на форме, только для чтения.
3. Редактирование данных о сотруднике - отдельная форма, по текстовым данным из Edit'ов составляется SQL-команда для редактирования записи (update), либо добавления новой записи (INSERT). Составленая команда выполняется компонентом связи с БД и подтверждается компонентом управления транзакциями.

Сделаю завтра или послезавтра.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Академик
320937
2216
09.03.2012, 17:55
общий
Адресаты:
Спасибо
давно
Мастер-Эксперт
425
4118
11.03.2012, 21:07
общий
это ответ
Здравствуйте, lamed!

Проект в прикреплённом файле. Lazarus 0.9.31.
Ключевые особенности:
- В компоненте TIBConnection (равно, как и в компонентах соединения с другими БД) обязательно нужно указывать свойство CharSet='utf8', т.к. в Lazarus строки кодируются именнов в UTF-8, а в Вашей БД кодировка строк ср1251. Если же в базе кодировка тоже UTF-8, то, в принципе, этот параметр можно не заполнять, но я Вам рекоммендую всё же его указывать. Этот параметр говорт серверу БД, в какой кодировке нужно высылать клиенту запрошенные им наборы данных.
- В Lazarus нет стандартной формы ввода логина и пароля для БД, как это было в Delphi. Однако, в событии TIBConnection.OnLogin, Вы можете вызвать свою форму для ввода пароля, значения полей которой, после зкрытия формы логина, нужно присвоить параметрам этого события username и password. Заносить логин и пароль при разработке в компонент TIBConnection (и любой другой компонент связи с БД) не рекоммендуется, т.к. они хранятся в открытом виде (как и в Delphi) и легко могут быть прочитаны коварными злодеями.
- При подтверждении транзакции (TSQLTransaction.Commit) одновременно и закрывается связанный с ним запрос (TSQLQuery). Это логично, т.к. всё равно придётся перезапрашивать данные после изменения.
- У компонента TSQLQuery есть три свойства, которых не было у аналогичного компонента в Delphi:
-- DeleteSQL, InsertSQL, UpdateSQL. Их назначение - содержать соответствующие SQL-запросы удаления\вставки\изменения данных, проводимые прямо в том наборе данных, который Вам вернул запрос к БД, текст которого содержится в свойстве SQL. Без них никакие изменения в наборе данных на сервер не попадут. В данной программе используются другие механизмы изменения данных, поэтому эти свойства оставлены пустыми. В Delphi эти функции выполнялись отдельным компонентом.
- Не забывайте положить в системный каталог или каталог с программой клиентскую библиотеку связи с сервером БД - fbclient.dll.
Пишите вопросы.
Прикрепленные файлы:
5
Большое спасибо за пример и содержательный ответ!<br>
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Академик
320937
2216
12.03.2012, 09:35
общий
Адресаты:
Добрый день! Правильно ли я понимаю, исходя из Вашего ответа, что использовать хранимые процедуры в Lazarus (как это было с IBStoredProcedure) нельзя?
давно
Мастер-Эксперт
425
4118
12.03.2012, 10:18
общий
Адресаты:
Можно. Но немного по другому. Отдельного компонента для хранимых процедур нет, но выполнить саму процедуру можно двумя путями, в зависимости от того, что именно делает Ваша процедура:
1) Если процедура возвращает набор данных, то её можно использовать в TSQLQuery, вместо команды SELECT.
2) Если процедура ничего не возвращает, а делает какие-то внутренние дела на сервере, то она запускается на выполнение с помощью TIBConnection.ExecuteDirect('Какое-нибудь название'). Этот метод предназначен для отправки любых SQL-команд прямиком на сервер, которые не возвращают наборы данных, т.е. почти все, кроме команды SELECT.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Академик
320937
2216
12.03.2012, 12:25
общий
Адресаты:
Большое спасибо! Будем пробовать.
давно
Академик
320937
2216
19.04.2012, 15:40
общий
Адресаты:
Добрый день, sir Henry! Не могли бы Вы посмотреть вопрос Lazarus-FB?
Спасибо
Форма ответа