Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#10

AW: Fehler bei Form.ShowModal

  Alt 23. Aug 2018, 11:31
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.
  Mit Zitat antworten Zitat