Aber ist das Form zum Zeitpunkt des fehlschlagenden Aufrufs auch schon erstellt worden?
Das könnte der Grund sein... Die Prüfung, ob die Datei vorhanden ist oder nicht findet im CREATE von TDatenbankUnit statt. Bis Gerade stand das Form_DBZugriffsdatenUnit ganz unten. Ich habe es jetzt nach oben gesetzt, aber das hat nicht den gewünschten Erfolg gebracht...
Delphi-Quellcode:
program iVisitor;
uses
Vcl.Forms,
Form_MainUnit
in '
Form_MainUnit.pas'
{Form_Main},
Form_DBZugriffsdatenUnit
in '
Form_DBZugriffsdatenUnit.pas'
{Form_DBZugriffsdaten},
TMultiLanguageUnit
in '
TMultiLanguageUnit.pas',
TDatenbankUnit
in '
TDatenbankUnit.pas',
TExcelExportUnit
in '
TExcelExportUnit.pas',
TGridDesignUnit
in '
TGridDesignUnit.pas',
TBitMapUnit
in '
TBitMapUnit.pas',
Form_PasswortUnit
in '
Form_PasswortUnit.pas'
{Form_Passwort},
Frame_SQLUnit
in '
Frame_SQLUnit.pas'
{Frame_SQL: TFrame};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm_Main, Form_Main);
Application.CreateForm(TForm_Passwort, Form_Passwort);
Application.CreateForm(TForm_DBZugriffsdaten, Form_DBZugriffsdaten);
Application.Run;
end.
Die Reihgenfolge im Uses ist irrelevant.
Wenn, dann muss man die Reihenfolge bei den Application.CreateForm ändern. Dann kann sich aber auch das Hauptformular der Anwendung ändern, was nicht zwingend zielführend ist.
Sinnvoller wäre es meiner Meinung nach, das Formular, das ja nur in bestimmten Fällen, aber nicht immer, benötigt wird, aus dem Erstellautomatismus rauszunehmen und nur bei Bedarf zu erstellen und nach der Nutzung freizugeben.
Also die Zeile
Application.CreateForm(TForm_DBZugriffsdaten, Form_DBZugriffsdaten);
aus der
DPR entfernen und den Aufruf des Formulares anpassen:
Delphi-Quellcode:
if not FileExists(ExtractFilePath(Application.ExeName) + '
SQL.set')
then begin
Form_DBZugriffsdaten := TForm_DBZugriffsdaten.Create(
nil);
ResultDBZugriff := Form_DBZugriffsdatenUnit.Form_DBZugriffsdaten.ShowModal;
Form_DBZugriffsdaten.Free;
if ResultDBZugriff > 1
then Exit;
end;
Und wenn man das dann noch in eine eigene Methode, mit 'ner vernünftigen Fehlerbehandlung packt, die sicherstellt, dass auch garantiert eine Freigabe des Formulares erfolgt, dann könnte das was werden.