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

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

TTable в Exe и Dll [D5, Oracle]


Alex Marmuzevich ©   (2002-09-10 23:24:00) 

В принципе проблема возникла в Билдере (5), но чувствую, что ноги все-равно растут из Делфи. Есть проект, работающий с Oracle 7.3. Взаимодействие через ODBC драйвер. Для связи используется один (на проект) TDatabase. Все работает. Захотел несколько форм засунуть в DLL. При попытке открыть таблицу (DatabaseName == DatabaseName TDatabase компонента) с DLL формы появляется окно с логином... Вопрос как "расшарить" подключение, созданное в одном модуле (EXE или DLL) с другим. Ну не хочется мне иметь много подключений к базе с одного клиента (жаба душит).
Кто поможет?


Alex Marmuzevich   (2002-09-12 21:19:00) [1]

Передача объектов - это то, на что я никогда не пойду, так как завтра напишут кусок на VC++ и что тогда? К базам, понятно, это не относится, но принцип дороже всего.


REA   (2002-09-12 11:41:00) [2]

PS: в принципе тогда уж можно и указатель на сам модуль данных передать со всеми базами и таблицами - тоже работает, но не забывать делать rebuid всего при изменении структур и т.п.
Если не хочется включать код всего модуля в DLL можно попытаться описать идентичный класс с абстрактными методами.


REA   (2002-09-12 11:37:00) [3]

В DLL полезно передать Application.Handle и присвоить его Apllication.Handle самой DLL где-нибудь в начале - тогда будут болле правильно создаваться окна (с нужным parent).
Рекомендую использовать sharemem и подключать rtl (bpl) packages, если вы все же решили передать указатель на класс.
Ну и делать rebuid всего при смене версии компилятора и компонент тогда уж.


Alex Marmuzevich   (2002-09-12 11:33:00) [4]

Все формы fsNormal. Вызываются через ShowModal.


ermserg   (2002-09-11 20:39:00) [5]

Kakiye u teba formi v DLL? fsNormal ili fsMDIChild?
esli MDI, poprobuy eto: http://www.gnomehome.demon.nl/uddf/pages/dll.htm#dll3


Alex Marmuzevich   (2002-09-11 20:31:00) [6]

>Ti ne zabivayesh peredavat Application v DLL? Mozhet vso delo v >etom?
Куда? Чтобы создавать формы типа TForm.Create ( Application )????
Или что другое?


ermserg   (2002-09-11 13:11:00) [7]

Vot eto v DLL:
--------------------
procedure Initialise(Connection : TADOConnection;
Settings : TStringList;
var Plugins : TStringList;
var DLL_ID : integer); export; StdCall;
begin
ADOConnection := Connection;
DataModulefm.QryGeneric1.Connection := ADOConnection;
...
--------------------
vso rabotayet otlichno. ADOConnection - global v DLL. Ti ne zabivayesh peredavat Application v DLL? Mozhet vso delo v etom?


Alex Marmuzevich   (2002-09-11 12:07:00) [8]

Я тут уже и TDatabase открытый в DLL передавал, и share handel неоднократно трогал. И сессии пытался одинаковыми делать. Только толку не добился.


REA   (2002-09-11 11:10:00) [9]

Desdechado: Не советую - придется использовать sharemem и т.п. и вообще компоненты плохо передаются в DLL и обратно, хотя работать возможно и будет.


Desdechado   (2002-09-11 10:58:00) [10]

попробуй не использоветь имя, а передавать в DLL указатель на Database в программе


REA   (2002-09-11 10:42:00) [11]

По идее такой трюк возможен (т.к. BDE использует shared memory), но забыл как реализовть. Ищи. Посмотри свойство типа share handle в DB компоненте на всякий случай. Сессия должна быть с одним имененем. Можно попробовать найти DB по сессии и присвоить Handle другому компоненту.


Alex Marmuzevich   (2002-09-11 10:28:00) [12]

И что. Таблица из DLL возмется за ум и будет использовать подключение от TDatabase exe файла? Сомневаюсь.


Alex Y   (2002-09-11 04:39:00) [13]

В OnShow формы Database.LoginPrompt := False


Наверх

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