Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с БД из DLL [D7, IB6.x]


Страницы:   1 2

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 ©
ээээ...а что это даст? можно поподробнее?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо