Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

Работа с БД из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.01 c
14-100902
kito
2003-07-14 09:14
2003.07.31
IDE UNvisible. Формы есть менюшек нет


4-101015
VP
2003-05-26 11:29
2003.07.31
ShellExecute ???????????


14-100973
blackman
2003-07-15 16:06
2003.07.31
We wish pleasant programming!


1-100799
Checist [root]
2003-07-17 11:56
2003.07.31
Ячейки DrawGrid


8-100832
SDS
2003-02-28 16:39
2003.07.31
Как создать TMetafileCanvas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский