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