передача соединения с БД между разными DLL
Модератор: kdv
передача соединения с БД между разными DLL
Здравствуйте, Господа!
Обдумываю сейчас структуру будущей программы. Преамбула такова - клиент будет писаться на C++Builder для FireBird с помощью компонентов IBX. Структура БД более-менее готова, возможны, конечно, мелкие доработки. Поскольку в БД возможно добавление/удаление полей, то возникла идея вынести работу с сервером на уровень хранимых процедур, а клиентские формы добавления/редактирования/удаления/поиска по фильтру положить в DLL, чтобы при изменении структуры БД менять не все приложение, а только одну DLL.
В связи с этим вопрос, как организовать работу такой DLL - чтобы она цеплялась к базе и работала. Класть в каждую DLL DataModule и соединяться с базой или каким-то образом можно обойтись одним подключением к базе (например, передавая дескриптор соединения между DLL. Как его в таком случае правильно передать?)? Как правильно поступить в таком случае?
С уважением, Londinium
Обдумываю сейчас структуру будущей программы. Преамбула такова - клиент будет писаться на C++Builder для FireBird с помощью компонентов IBX. Структура БД более-менее готова, возможны, конечно, мелкие доработки. Поскольку в БД возможно добавление/удаление полей, то возникла идея вынести работу с сервером на уровень хранимых процедур, а клиентские формы добавления/редактирования/удаления/поиска по фильтру положить в DLL, чтобы при изменении структуры БД менять не все приложение, а только одну DLL.
В связи с этим вопрос, как организовать работу такой DLL - чтобы она цеплялась к базе и работала. Класть в каждую DLL DataModule и соединяться с базой или каким-то образом можно обойтись одним подключением к базе (например, передавая дескриптор соединения между DLL. Как его в таком случае правильно передать?)? Как правильно поступить в таком случае?
С уважением, Londinium
Re: передача соединения с БД между разными DLL
по-моему идея паршивая. хотя все зависит от реализации.
Впрочем, чем тогда будет заниматься приложение - только грузить dll? тогда какой смысл?
какая разница, что менять - одну dll или один exe? где уверенность, что пользователь сможет корректно заменять dll? и т.д.
Впрочем, чем тогда будет заниматься приложение - только грузить dll? тогда какой смысл?
какая разница, что менять - одну dll или один exe? где уверенность, что пользователь сможет корректно заменять dll? и т.д.
Re: передача соединения с БД между разными DLL
Смысл в том, что dll будет не одна. Планирую так - в одной dll будет лежать форма для внесения записей в базу, в другой - редактирование справочников, в третьей - выборка записей по фильтрам, в четвертой - всякие-разные отчеты. Разве такая схема более кривая?Впрочем, чем тогда будет заниматься приложение - только грузить dll? тогда какой смысл?
Re: передача соединения с БД между разными DLL
конечно. допустим, один раз добавил столбец в справочниках. изменение одной длл проканает. А потом изменил два столбца в двух разных длл.Разве такая схема более кривая?
Я пока не могу понять выгоды от изменения длл и всего этого гемора с пэкэджами вместо изменения одного exe. Аргументов нормальных не вижу.
Рекомендую все-таки продумать не "как у меня все будет красиво и зашибись", а "как я буду этот кошмар обновлять у клиентов, и какие проблемы могут вылезти". Побольше пессимизма - ибо большинство кривого софта сделано с благими намерениями о "красиво".
p.s. за исключением, может быть, отчетов. которые лучше вообще хранить как отдельные файлы. большинство отчетных компонент такое позволяют.
p.p.s. вот, например, ресурсы для разных языков в dll - это нормально. Еще - разные запросы для разных СУБД. Примерно так. А пока идея выглядит как "я бизнес-логику порубаю топором на части и положу в разные места, и будет кайф". В чем кайф, если туфли лежат в подвале, рубашка в комнате, а костюм на чердаке?
Re: передача соединения с БД между разными DLL
Полностью поддерживаю. Особенно стоит подумать о работе с БД нескольких DLL _разных_ версий, по какой-либо причине не вызывающих конфликта _сразу_.kdv писал(а):"как я буду этот кошмар обновлять у клиентов, и какие проблемы могут вылезти".
Вот тут не соглашусь. Отчёты лучше хранить в БЛОБах в самой БД. Большинство отчётных компонент такое позволяютkdv писал(а):p.s. за исключением, может быть, отчетов. которые лучше вообще хранить как отдельные файлы. большинство отчетных компонент такое позволяют.
Re: передача соединения с БД между разными DLL
А как засунить шаблон отчета fr_4 в блоб???
Re: передача соединения с БД между разными DLL
а как вообще засунуть в блоб что либо? www.ibase.ru/ibfaq.htmА как засунить шаблон отчета fr_4 в блоб???
Re: передача соединения с БД между разными DLL
Я передаю дескриптор соединения в dll с помощью следующей структуры
А потом в dll так:
Код: Выделить всё
type
PDBExportHandle = ^TDBExportHandle;
TDBExportHandle = packed record
Handle: TISC_DB_HANDLE;
LibraryName: PChar;
SQLDialect: Integer;
CharSet: PChar;
end;
Код: Выделить всё
dbMain.LibraryName := ADBExportHandle^.LibraryName;
dbMain.ConnectParams.CharSet := ADBExportHandle^.CharSet;
dbMain.SQLDialect := ADBExportHandle^.SQLDialect;
dbMain.Handle := ADBExportHandle^.Handle;