Ошибка означает, что TDataModule
еще не создан, когда вы пытаетесь использовать его для создания запроса через DMDB.NewQuery()
.
Причина ошибки складывается вдвое.
Во-первых, при использовании IDE сначала для создания формы (DlgMain: TDlgMain
в вашем случае), а затем модуля данных (TDMDB: TDataModule
). Это помещает создание модуля после создания формы в файл проекта (.dpr
) следующим образом: (чтобы увидеть файл .dpr
, выберите меню Project - View source
)
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDlgMain, DlgMain);
Application.CreateForm(TDMDB, DMDB);
Application.Run;
end.
Во-вторых, при попытке для создания соединения уже в основных формах OnCreate()
событие, когда модуль данных еще не создан, результатом будет AV, который вы видите.
Вы можете исправить ошибку, переместив создание вашего модуля данных перед созданием вашей основной формы:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDMDB, DMDB); // Create this before the form
Application.CreateForm(TDlgMain, DlgMain);
Application.Run;
end.
Примечание, на случай, если вам интересно:
Возможно, вы знаете, что первая форма, созданная с помощью Application.CreateForm()
становится основной формой, и это все еще действует. Модуль данных не является формой, и поэтому ваша DlgMain
по-прежнему остается первой созданной формой и становится основной формой.