DataModule в DLL

SNike
Дата: 10.12.2007 11:45:28
Доброго времени суток.
Прошу разъяснить, где моя промашка в следующей ситуации:

Создана DLL, в ней: форма (TForm) и модуль данных (TDataModule).

Модуль данных включает:
- FibDatabase
- FibDataset_1 > DataSource_1
- FibDataset_2 > DataSource_2

На форме:
- Grid_1 > DataSource_1
- Grid_2 > DataSource_2

При создании DLL:


procedure InitDLL(App, Scr : integer);
begin
  Screen := TScreen(Scr);
  Application := TApplication(App);
end

Procedure InitDB(DBName, UserName, Pwd: PChar);
Begin
  DM := TDM.Create(Application); // DataModule
  DM.Database.DatabaseName := DBName;
  DM.Database.ConnectParams.UserName := UserName;
  DM.Database.ConnectParams.Password := Pwd;
End;

Function OpenBase: Boolean;
Begin
  DM.Database.Connected := True;
  Result := DM.Database.Connected;
End;

Источники данных подготовлены - затем создаём форму с гридами, которые связаны с DataSource из DataModule. Однако, почему-то реально связан с данными только первый грид. Иногда и вообще никакой не связан (эксперементировал, но причину не установил). Иными словами Grid.DataSource=Nil

Как с этим бороться?
Petro123
Дата: 10.12.2007 12:04:21
- пакеты включены?
- pchar в Delphi зачем
- На одно приложение 2 коннекта - зачем?
- при загрузке длл - ждать соединения с БД зачем?

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
SNike
Дата: 10.12.2007 12:15:43
Petro123
- пакеты включены?
- pchar в Delphi зачем
- На одно приложение 2 коннекта - зачем?
- при загрузке длл - ждать соединения с БД зачем?


1) Пакеты не включены (возможно в этом проблема) - не особо хочется таскать с программой дополнительные BPL. К тому же, если не ошибаюсь, в примере от поставщиков пакет не включается.

2) PChar - чтоб избавиться от BORLNDMM.DLL

3) 2 коннекта - т.к. не удалось передать в DLL DataBase из программы. Тоже вопрос...
Пробовал пример из примеров для FIB - с новой версией все проходит нормально, но у меня более старая - тот пример не работает

4) А где у меня ожидание соединения?
Я просто: Настраиваю параметры соединения > Открываю базу > Создаю форму
Petro123
Дата: 10.12.2007 12:43:39
нет логики:
- bpl таскать не хочешь, а DLL создаёшь и таскаешь (коннект в exe нельзя?)
- на флэшку bpl не влазит?


ну если требование - минимальный размер, то делай всё в exe 8-)
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
SNike
Дата: 10.12.2007 12:48:01
Да уж, одним Exe точно минимального размера добьешься :)
Да, все логично. Значит нужно всеж включить пакет...
Спасибо, попробуем.

Кстати, как тогда передать соединение в DLL? Передавать Database.handle и назначать этот хэнд компоненту Database в DLL ?
Petro123
Дата: 10.12.2007 12:51:24
SNike
Да уж, одним Exe точно минимального размера добьешься :)
Да, все логично. Значит нужно всеж включить пакет...
Спасибо, попробуем.

Кстати, как тогда передать соединение в DLL? Передавать Database.handle и назначать этот хэнд компоненту Database в DLL ?



procedure InitDLL(Fib : FibDatabase);
Petro123
Дата: 10.12.2007 12:52:43
Petro123
SNike
Да уж, одним Exe точно минимального размера добьешься :)
Да, все логично. Значит нужно всеж включить пакет...
Спасибо, попробуем.

Кстати, как тогда передать соединение в DLL? Передавать Database.handle и назначать этот хэнд компоненту Database в DLL ?



procedure InitDLL(Fib : FibDatabase);

и вообще разберись кто у тебя сверху а кто снизу 8-) (где коннект)
SNike
Дата: 10.12.2007 13:01:55
Коннект однозначно в программе. В идеале в dll должны быть только DataSet и DataSource. Если я в правильную сторону думаю, то в DLL вообще можно передать Database.Handle из программы, а там уж его назначить всем Dataset. Таким образом будет одно соединение и все будет в пределах одной транзакции. Или же я всеж не в ту сторону думаю?
SNike
Дата: 10.12.2007 13:34:54
Petro123
procedure InitDLL(Fib : FibDatabase)


Все понял, спасибо. Пока я писал новое сообщение Petro123 уже меня опередил.
И, как вывод: включаем Packages и передаем в DLL существующий коннект

Спасибо, Petro123, буду пробовать
Johnmen
Дата: 10.12.2007 13:39:15
SNike

И, как вывод: включаем Packages и передаем в DLL существующий коннект

Ждем тебя снова с нетерпением