Текущий архив: 2003.07.31;
Скачать: CL | DM;
ВнизРабота с БД из DLL Найти похожие ветки
← →
Tiny (2003-07-10 06:13) [0]Уважаемые мастера! Подскажите,plz,такую вешь:
1. Есть exe-шник - при загрузке проверяется наличие плагинов (dll) и загрузка их + подключение к БД (TIBDatabase) и ,в общем-то, все
2.В dll соответственно хранятся формы,Query,DBGrid"ы и т.д.
Собственно - вопрос: Как из DLL из Query добраться до Database в exe и получить данные из какой либо таблицы ?(если это вообще возможно?)
← →
Alexandr (2003-07-10 07:16) [1]тут проще в dll свой коннект организовать...
← →
Radionov Alexey (2003-07-10 07:21) [2]Все передавть как параметр в одну из функций DLL
← →
Zacho (2003-07-10 07:26) [3]Еще один способ: создается package c модулем, в котором находится IBDataBase. В длл подключается этот модуль. И основная программа, и все длл компилируются с включенной опцией Build with runtime packages.
← →
Tiny (2003-07-10 07:49) [4]2 Alexandr ©
dll может быть 2 а может и 20. помоему не совсем правильный подход...
2 Radionov Alexey ©
передать что? IbDatabase? не даст dll такое сделать насколько я знаю... так же как и любой другой класс...
2 Zacho ©
ээээ...а что это даст? можно поподробнее?
← →
Alexandr (2003-07-10 08:07) [5]ну а для разных Tdatabase использовать один хэндл...
а хэндл этож просто число его можно передавать хоть куда...
А в чем проблема в нескольких коннектах?
← →
Zacho (2003-07-10 08:12) [6]
> Tiny (10.07.03 07:49)
Например, в твоей программе есть DataModule в котором находится IBDataBase. Включаешь этот модуль в какой-либо package, компилируешь пакет. Включаешь в Project/Options Build with runtime packages и в основной программе, и во всех dll. В dll в uses указываешь имя этого модуля. После этого делаешь все в dll так же, как бы делал и в обычной программе. Т.е. в св-во Database компонентов устанавливашь IBDatabase из этого модуля и т.п.
P.S. Возможно, я упустил какие-то ньюансы, последний раз делал подобное еще в 1999 г., кое-что мог и подзабыть.
← →
Tiny (2003-07-10 08:17) [7]>ну а для разных Tdatabase использовать один хэндл...
>а хэндл этож просто число его можно передавать хоть куда...
и что мне даст этот хэндл??
А в чем проблема в нескольких коннектах?
ну как минимум затраты времени и ресурсов на подключение.
← →
DenK_vrtz (2003-07-10 08:19) [8]А в чем собственно проблема?!
При загрузке DLL из основного экзешника DataSet"ы легко "видят" Database компонент.
Проверял!
← →
Tiny (2003-07-10 08:22) [9]
> Zacho © (10.07.03 08:12)
И ты хочешь сказать что при этом подключение к БД из длл будет происходить через Database exe-шника?
← →
Zacho (2003-07-10 08:27) [10]
> Tiny (10.07.03 08:22)
Не экзешника, а bpl. В том и суть, что и exe, и dll будут использовать один и тот же IBDatabase из bpl.
Но возможно для твоей задачи больше подойдет передача хендла IBDatabase из exe в dll.
← →
Tiny (2003-07-10 08:29) [11]
> DenK_vrtz © (10.07.03 08:19)
> А в чем собственно проблема?!
> При загрузке DLL из основного экзешника DataSet"ы легко
> "видят" Database компонент.
> Проверял!
Как именно? Передавать в качестве параметра IbDatabase или что?
← →
Tiny (2003-07-10 08:34) [12]
> Zacho © (10.07.03 08:27)
> Не экзешника, а bpl. В том и суть, что и exe, и dll будут
> использовать один и тот же IBDatabase из bpl.
Теперь понял...
> Но возможно для твоей задачи больше подойдет передача хендла
> IBDatabase из exe в dll.
а что мне даст этот хэндл-то? как мне потом указать DataSet"ам в длл использовать этот Database?
← →
DenK_vrtz (2003-07-10 08:39) [13]Tiny (10.07.03 08:29), во время разработки у всех DataSet"ов прописать свойство DatabaseName, такое же как у Database компонента основног exe файла
← →
Tiny (2003-07-10 08:50) [14]
> DenK_vrtz © (10.07.03 08:39)
> Tiny (10.07.03 08:29), во время разработки у всех DataSet"ов
> прописать свойство DatabaseName, такое же как у Database
> компонента основног exe файла
хых....для компонентов InterBase это не пройдет - IbQuery.DatabaseName - должно указывать на IbDatabase и только...
а в BDE да, можно...
← →
DenK_vrtz (2003-07-10 08:54) [15]Tiny (10.07.03 08:50), очень жаль! :-(
← →
Zacho (2003-07-10 09:05) [16]
> Tiny (10.07.03 08:34)
>
> а что мне даст этот хэндл-то? как мне потом указать DataSet"ам
> в длл использовать этот Database?
Насчет именно хэндла - точно не знаю, а врать не хочется :-)
Но так как exe и dll работают в одном адресном пространстве, то можно сделать просто. Передаешь в dll указатель на IBDatabase из exe и присваиваешь его св-вам Database в IBDataset"ах и т.п. Только dll и exe должны быть скомпилированы в одной версии Дельфи.
← →
Radionov Alexey (2003-07-10 09:11) [17]>Tiny (10.07.03 07:49)
>передать что? IbDatabase?
>не даст dll такое сделать насколько я знаю...
>так же как и любой другой класс...
Ах, оставьте! Другое дело, что VMT разная будет. Но в этом случае оно имхо погоды не испортит.
← →
Tiny (2003-07-10 09:15) [18]уже пробовал...нельзя.
Даже в одном приложении :
IbTable1.Database.Handle:=IBDatabase1.Handle
[Error] Unit1.pas(29): Cannot assign to a read-only property
← →
Zacho (2003-07-10 09:18) [19]
> Tiny (10.07.03 09:15)
Естественно, оно только для чтения.
Передавай не Handle, а IBDatabase1
← →
Tiny (2003-07-10 09:21) [20]> Radionov Alexey © (10.07.03 09:11)
то есть ты хочешь сказать что я могу в длл передать Database?
← →
Radionov Alexey (2003-07-10 09:22) [21]Именно
← →
Tiny (2003-07-10 09:25) [22]Передавай не Handle, а IBDatabase1
Вот как раз это я и хотел узнать...можно сделать так или нет...давненько что-то подобное пытался сделать - не получилось.А может я просто "не умел их готовить" ?
ОК, попробую сделать - о результатах сообщу.
Всем большой Thanks!
← →
Tiny (2003-07-10 10:29) [23]Заработала!!!!!! ))
Еще раз Thanks всем!!!!!!
Страницы: 1 вся ветка
Текущий архив: 2003.07.31;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.008 c