Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.014 c
1-100662
ray_w
2003-07-15 09:51
2003.07.31
Событие при наведении курсора


1-100697
cjiohobaji
2003-07-18 13:31
2003.07.31
path


14-100934
race1
2003-07-13 15:41
2003.07.31
momed COM


11-100648
mike.dld
2002-11-11 15:54
2003.07.31
Опять StringGrid


14-100889
Soft
2003-07-16 11:29
2003.07.31
Скажи мне какой товар ты предпочитаешь и я скажу кто ты.