C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Access to Interbase through BDE, Очень медленная передача данных
iAlexander
Отправлено: 27.07.2005, 10:58


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Всем привет.
Использование такой странной связки вызвано тем, что программа, ранее работавшая с Paradox через BDE, теперь должна быть перенесена на Interbase. Вся программа построена на TQuery (и частично TTable), коих множество, в том числе как визуальных, так и создаваемых в run-time. Поэтому замена их на IB компоненты обойдется немалой кровью.
Чтобы избежать этого, я добавил TDataBase, все TDataSet завязал на эту TDataBase, настроил для TDataBase алиас, использующий драйвер INTRBASE и соответствующий моей Interbase 6.0 базе. IB 6.0 я использую сам, поэтому перспектива постоянно перепрыгивать с 5 на 6 сервер и обратно меня не вдохновляет smile.gif. Базу я сконвертировал из Paradox'овой в Interbase 6.0 dialect 1.
Проблем возникло достаточно, но я скажу сейчас только об одной. Если ее не удастся разрешить, говорить об остальных смысла наверное не будет.
Выборка данных SQL выражением через компонент TQuery при использовании IB алиаса занимает несколько секунд (!) против долей секунды при Paradox'e. Это при том, что вся база 3Мб и выборка очень простая.
Тормозит ли так связка Builder 5.0 — BDE — Interbase 6, или я ее неправильно использую?
olegenty
Отправлено: 27.07.2005, 12:16


Ветеран

Группа: Модератор
Сообщений: 2412



проверь настройки INTERBASE LINK на предмет курсора. если сделать его серверным, возможно, это чуть "ускорит" выборку. сильно вдаваться в суть того, почему НЕ СТОИТ использовать BDE для доступа к Interbase, не буду — много информации на ibase.ru
iAlexander
Отправлено: 27.07.2005, 12:40


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Спасибо за ответ.
Что такое INTERBASE LINK и где его можно настроить, я не знаю, но если преимущество от этого будет столь незначительным, то проблемы это не снимает.
Будет ли работать эффективнее BDE с Interbase 5? (вместо IB6)
Существуют ли эффективные автоматические способы подмены BDE компонентов на ADO или IB? (Существенно в данном случае именно время, затраченное на переделку)
olegenty
Отправлено: 27.07.2005, 14:17


Ветеран

Группа: Модератор
Сообщений: 2412



настроить его можно в BDE Administrator, при создании Alias'а к твоей БД.
быстрого способа перейти на другие компоненты нет.
идеальный способ досупа — использование FIBPlus (об этом можно почитать как на ibase.ru, так и на Devrace.com, всё будет вращаться вокруг пары: длинная читающая короткая транзакция/короткая пишущая)
переход хоть на IBX, хоть на FIBPlus — будет долгим и мучительным.
я бы порекомендовал осуществить его (это IMHO), используя "прослоечные" компоненты — TMemTableEh + TIBXDataDriverEh/TFIBDataDriverEh из пакета компонентов EhLib. TMemTableEh — клиентский набор данных. Если позже что-то придётся опять серьёзно модифицировать, достаточно будет заменить один TXXXDataDriver на другой.
iAlexander
Отправлено: 27.07.2005, 18:37


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Хорошо, поскольку разница между IB и FIBPlus мне неизвестна, я последую вашему совету.
Но есть вопрос: сколько примерно компонент FIBPlus добавит к моему exe?
Я как-то использовал EhLib — прискорбно, но он добавил кажется 1,5 М!!
И, может быть, тогда уже использовать какую-нибудь другую версию Interbase или FireBird, с поддержкой Boolean и прочими совместимостями с Paradox'ом?

Отредактировано iAlexander — 27/07/2005, 18:38
olegenty
Отправлено: 28.07.2005, 07:18


Ветеран

Группа: Модератор
Сообщений: 2412



таких версий пока нет.

компилируй with runtime packages, и не мучайся весомостью smile.gif

к сожалению, так устроен компилятор Borland — либо влинковывает всё, либо — ничего.
iAlexander
Отправлено: 24.09.2005, 17:46


Дежурный стрелочник

Группа: Участник
Сообщений: 70



To olegenty
О долгом и мучительном переходе:
Я посмотрел на компоненты IBX в BCB5 и нашел их во многом похожими на аналогичные компоненты для работы через BDE. Это значительно облегчит перевод программы на использование IBX.

Помня в то же время о вашем совете относительно FIBPlus, я установил Trial версию 6.25. Значительным (с моей точки зрения и в моей ситуации) недостатком является то, что эти компоненты не следуют иерархии наследования от TDataSet. Таким образом, я лишаюсь возможности оставить текущие Grid'ы, Edit и ComboBox'ы и прочие элементы управления, а это означает полную переделку визуальной части. К сожалению, это для меня является неприподъемной задачей.

Не могли бы вы указать какие-либо причины, по которым мне следует отменить переделку под IBX компоненты (серьезные глюки IBX/Interbase, наличие еще каких-либо альтернатив) ? Исходя из того, что база останется под Interbase'ом, и возможно, лишь будет инкрементироваться версия СУБД. Очень хочется быть полностью уверенным в своем выборе перед началом таких крупномасштабных операций smile.gif

Отредактировано iAlexander — 24/09/2005, 17:47
olegenty
Отправлено: 26.09.2005, 07:04


Ветеран

Группа: Модератор
Сообщений: 2412



??? FIBPlus-таки ничего не нарушает, используй TpFIBDataSet, и наздоровье пользуйся всем, что было по пользовательскую сторону от TDataSource. Это раз. IBX + Firebird — неживая связка — это два. а Interber 5 давно не жив, это тоже уже факт smile.gif
iAlexander
Отправлено: 27.09.2005, 10:10


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Спасибо. TpFIBDataSet я как-то не заметил, посмотрел лишь на TpFIBQuery. Про FB — я специально оговорился про InterBase, а мой BCB5+IBX нормально выбирал и писал данные в IB6.1 используя диалект 1. Но: я спрашивал человека, использовавшего updated IBX (видимо, с ibase.ru) — и он сказал, что его программа (BCB5) нормально работала и с FireBird'вой базой. Вот.
Как я понял, TpFIBDataSet кроме всего прочего совмещает в себе функциональность TQuery+TUpdateSQL. Это хорошо smile.gif

Кстати, заметил глюк генерации SQL выражений: при нажатии на кнопку GenerateSQLs RefreshSQL генерируется с ошибкой:
CODE

DeleteSQL
DELETE FROM
FILES
WHERE
FILE_ID = :OLD_FILE_ID

CODE

RefreshSQL
select * from files;

WHERE
FILES.FILE_ID = :OLD_FILE_ID


Какие существенные ограничения поджидают меня в Trial-версии? Ибо покупать full компонент я пока не собираюсь... sad.gif
Или если буду использовать FIBPlus3 (последняя бесплатная версия) — как там с глюками и с функциональностью?

Отредактировано iAlexander — 28/09/2005, 18:56
olegenty
Отправлено: 03.10.2005, 12:33


Ветеран

Группа: Модератор
Сообщений: 2412



версию 3 использовать не вздумай — функционал этой древней версии не учитывает всех нововведений в Interbase/Firebird

full — для русских за 700 рублей + год бесплатной поддержки/обновлений

ограничения триала ТОЛЬКО в появляющемся при старте приложения предупреждении, что используется триал.

IBX-таки может работать с Firebird, достаточно переименовать fbclient.dll в gds32.dll. однако, объективная реальность такова, что в данный момент интерфейсы этих библиотек от Interbase и Firebird далеко не идентичны. что-то будет работать, что-то — нет.

Вернуться в Работа с базами данных в C++Builder