Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизTTable в Exe и Dll Найти похожие ветки
← →
Alex Marmuzevich (2002-09-10 23:24) [0]В принципе проблема возникла в Билдере (5), но чувствую, что ноги все-равно растут из Делфи. Есть проект, работающий с Oracle 7.3. Взаимодействие через ODBC драйвер. Для связи используется один (на проект) TDatabase. Все работает. Захотел несколько форм засунуть в DLL. При попытке открыть таблицу (DatabaseName == DatabaseName TDatabase компонента) с DLL формы появляется окно с логином... Вопрос как "расшарить" подключение, созданное в одном модуле (EXE или DLL) с другим. Ну не хочется мне иметь много подключений к базе с одного клиента (жаба душит).
Кто поможет?
← →
Alex Y (2002-09-11 04:39) [1]В OnShow формы Database.LoginPrompt := False
← →
Alex Marmuzevich (2002-09-11 10:28) [2]И что. Таблица из DLL возмется за ум и будет использовать подключение от TDatabase exe файла? Сомневаюсь.
← →
REA (2002-09-11 10:42) [3]По идее такой трюк возможен (т.к. BDE использует shared memory), но забыл как реализовть. Ищи. Посмотри свойство типа share handle в DB компоненте на всякий случай. Сессия должна быть с одним имененем. Можно попробовать найти DB по сессии и присвоить Handle другому компоненту.
← →
Desdechado (2002-09-11 10:58) [4]попробуй не использоветь имя, а передавать в DLL указатель на Database в программе
← →
REA (2002-09-11 11:10) [5]Desdechado: Не советую - придется использовать sharemem и т.п. и вообще компоненты плохо передаются в DLL и обратно, хотя работать возможно и будет.
← →
Alex Marmuzevich (2002-09-11 12:07) [6]Я тут уже и TDatabase открытый в DLL передавал, и share handel неоднократно трогал. И сессии пытался одинаковыми делать. Только толку не добился.
← →
ermserg (2002-09-11 13:11) [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 20:31) [8]>Ti ne zabivayesh peredavat Application v DLL? Mozhet vso delo v >etom?
Куда? Чтобы создавать формы типа TForm.Create ( Application )????
Или что другое?
← →
ermserg (2002-09-11 20:39) [9]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-12 11:33) [10]Все формы fsNormal. Вызываются через ShowModal.
← →
REA (2002-09-12 11:37) [11]В DLL полезно передать Application.Handle и присвоить его Apllication.Handle самой DLL где-нибудь в начале - тогда будут болле правильно создаваться окна (с нужным parent).
Рекомендую использовать sharemem и подключать rtl (bpl) packages, если вы все же решили передать указатель на класс.
Ну и делать rebuid всего при смене версии компилятора и компонент тогда уж.
← →
REA (2002-09-12 11:41) [12]PS: в принципе тогда уж можно и указатель на сам модуль данных передать со всеми базами и таблицами - тоже работает, но не забывать делать rebuid всего при изменении структур и т.п.
Если не хочется включать код всего модуля в DLL можно попытаться описать идентичный класс с абстрактными методами.
← →
Alex Marmuzevich (2002-09-12 21:19) [13]Передача объектов - это то, на что я никогда не пойду, так как завтра напишут кусок на VC++ и что тогда? К базам, понятно, это не относится, но принцип дороже всего.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c