Deine Quellen stimmen nicht mehr...
dmMain wird nicht mehr erzeugt, aber egal...
Im OnCreate des DataModule hast du ein Application.Terminate.
Das macht
IMHO Probleme und sollte dort raus.
Ich würde folgendes machen:
Delphi-Quellcode:
unit Modul;
interface
uses
SysUtils, Classes;
type
TdmMain =
class(TDataModule)
private
procedure Init;
public
procedure AfterConstruction;
override;
procedure BeforeDestruction;
override;
end;
function dmMain: TdmMain;
var
//dmMain: TdmMain;
FdmMain: TdmMain =
nil;
implementation
{$R *.dfm}
function dmMain: TdmMain;
begin
if FdmMain =
nil then
begin
FdmMain := TdmMain.Create(Application);
FdmMain.Init;
end;
Result := FdmMain;
end;
procedure TdmMain.AfterConstruction;
begin
inherited;
// oder alternativ hier rein alles aus deinem Create
// und das Init raus
end;
procedure TdmMain.BeforeDestruction;
begin
// hier das DisConnect
if ibconMain.Connected
then
begin
ibconMain.CloseTransactions;
ibconMain.DeallocateStatements;
ibconMain.Disconnect;
end;
inherited;
end;
procedure TdmMain.Init;
begin
// hier alles aus deinem OnCreate rein
end;
end.
Variable dmMain raus und dafür eine Funktion, dann braucht man sich um das Erzeugen nicht zu kümmern.
Das DisConnect in das Datenmodul, dann kann es aus dem MainForm raus.
Ich habe 2 alternative Varianten. Entweder Init oder AfterConstruction
Ich verwende Create und Destroy wirklich nur zum Erzeugen oder Freigeben eigener Objekte und Initialisierung von Variablen.
Alles Andere kommt nach dem vollständigen Erzeugen oder vor dem Zerstören.
Viel Glück!
Frank