![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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