AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Programm Login Fenster

Ein Thema von Edelfix · begonnen am 28. Sep 2020 · letzter Beitrag vom 29. Sep 2020
Antwort Antwort
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
216 Beiträge
 
Delphi 10.4 Sydney
 
#1

Windows Programm Login Fenster

  Alt 28. Sep 2020, 09:39
Hallo,

es geht bei meiner Frage darum das ich immer wieder mit Bug Reports von Madshi zu tun habe die ich nicht verstehe. Wenn ich so ein Bug Report lese dann sehe ich welche Units nach einander abgearbeitet wurden bis es gekracht hat. In den mysteriösen Bug Reports tauchen aber nur System Units auf und keine von meinen. Jetzt habe ich einen Verdacht. Es hat was mit dem Start Verhalten zu tun. Mein Programm hat in dem Create Bereich der Main Form ein Login Fenster und nach erfolgreichem Login ein Lade Fenster (Variablen werden mit Werten aus DB gefüllt). Wenn alles erfolgreich war kommt erst Application.Run und die Main Form wird angezeigt.

Würdet ihr den Aufbau auch so gestalten? Könnte es sein das Madshi erst ab Application.Run vernünftige Bug Reports erstellen kann?

Beispiel für ein Bug Report:

exception message : Argument außerhalb des Bereichs.

main thread ($16bc):
004eb2f6 +00e Test1.Exe System.Classes TCollection.GetItem
007bcd72 +012 Test1.Exe adsdata 1697 +1 TACEFieldDefs.GetItem
007c1b17 +0ff Test1.Exe adsdata 5019 +21 TAdsDataSet.ReadTranslatedRecord
007c1ecd +119 Test1.Exe adsdata 5175 +52 TAdsDataSet.GetCurTranslatedRecord
007c7323 +0e7 Test1.Exe adsdata 8605 +37 TAdsDataSet.InternalCancel
007884fa +062 Test1.Exe Data.DB TDataSet.SetCurrentRecord
007892ae +072 Test1.Exe Data.DB TDataSet.Cancel
007ca8ae +00a Test1.Exe adsdata 11209 +5 TAdsDataSet.Cancel
00785a2d +0ad Test1.Exe Data.DB TDataSet.SetActive
00785828 +004 Test1.Exe Data.DB TDataSet.Close
007850aa +01a Test1.Exe Data.DB TDataSet.Destroy
007be0fb +093 Test1.Exe adsdata 2733 +22 TAdsDataSet.Destroy
007d5b22 +01a Test1.Exe adstable 2292 +5 TAdsTable.Destroy
00409ebc +008 Test1.Exe System 44 +0 TObject.Free
00502116 +076 Test1.Exe System.Classes TComponent.DestroyComponents
00501baf +01b Test1.Exe System.Classes TComponent.Destroy
00503fa6 +066 Test1.Exe System.Classes TDataModule.Destroy
00409ebc +008 Test1.Exe System 44 +0 TObject.Free
00502116 +076 Test1.Exe System.Classes TComponent.DestroyComponents
00721e51 +035 Test1.Exe Vcl.Forms DoneApplication
0045a329 +021 Test1.Exe System.SysUtils DoExitProc
0040bbb2 +06e Test1.Exe System 44 +0 @Halt0
02f5c36e +08e Test1.Exe Test1 504 +12 initialization
77566357 +017 KERNEL32.DLL


Teil aus den Quelltext:

Delphi-Quellcode:
begin
  Application.Initialize;
  // --
  // --
  // --
  Application.MainFormOnTaskbar := True;
  TStyleManager.TrySetStyle('Windows10 Office Light');
  Application.HelpFile := 'Test1.chm';
  Application.Title := 'Test1 ADS';
  Application.CreateForm(TMainForm, MainForm);
  If Not StartAbbruch Then
    Application.Run;
end.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#2

AW: Windows Programm Login Fenster

  Alt 28. Sep 2020, 12:49
02f5c36e +08e Test1.Exe Test1 504 +12 initialization

Liest sich, als würde das im initialisierungs-Block einer Unit knallen.
Schau mal in dieser Richtung. ... Von der Struktur (main-Form erstellt im Create ein Login usw.)
klingt das schon fast bekannt.
Ich denke so oder so in der Art machen das viele.

MfG Incocnito
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#3

AW: Windows Programm Login Fenster

  Alt 28. Sep 2020, 13:33
Dein Vorgehen ist insgesamt leicht fehleranfällig, wenn auch nicht unüblich.

Um derartige Probleme zu verhindern, gehe ich her und packe 'nen Timer aufs Formular.

Die letzte Zeile im FormCreate aktiviert den Timer.

In die Timerroutine kommt dann alles, was mit dem Aufbau der Datenbankverbindung, Login, ... zusammenhängt.

Wird dort z. B. das Login abgebrochen, wird das Programm mit 'nem regulären Close des Mainforms wieder beendet.

Dadurch ist keine zusätzliche Logik in der dpr erforderlich oder ein bedingtes Application.Run.

Das Timerinterval wähle ich so, dass es für eine vollständige Initialisierung des gesamten Programmes ausreicht. Muss man halt ein bisserl probieren, in der Regel reicht eine Sekunde aber locker aus.

Der Bugreport sieht für mich so aus, als würde da 'ne Datenbankverbindung beendet, bzw. ein Dataset geschlossen, bevor es überhaupt erst richtig geöffnet und alle zugehörigen "Teile" initialisiert wurden.

Gibt es Situationen, in denen das Programm im FormCreate wieder beendet wird?
Wenn ja, ist dort sichergestellt, dass die Datenbankverbindung und alle Datasets vorher geschlossen werden?
Ist ebenfalls sichergestellt, dass nur bei erfolgreichem Datenbanklogin und Aufbau der Datenbankverbindung, DataSets geöffnet werden und/oder ein Zugriff auf sie erfolgt?

Wie verhält sich Dein Programm, wenn das Anmelden im Loginfenster nicht erfolgreich war?
Wie verhält es sich, wenn beim Laden der Variabeln aus der DB, etwas nicht funktioniert?

In dem Umfeld dürfte der Fehler zu finden sein. Irgendwas bei der Initialisierung der Datenbankverbindung, der DataSets scheint da gehörig schief zu laufen.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Windows Programm Login Fenster

  Alt 28. Sep 2020, 13:46
Was passiert denn wenn man

Delphi-Quellcode:
begin
  startabbruch := true;
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  If Not StartAbbruch Then
    Application.Run;
end.
eine form created und dann nichts macht? also einfach "end."
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
216 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Windows Programm Login Fenster

  Alt 29. Sep 2020, 08:27
Danke für die Hinweise.

@Incocnito. Ich glaube das ist der interessanteste Hinweis. Es sind ein paar Units mit initialization und finalization. Die hatte ich bis jetzt nicht überprüft.

@Delphi.Narium. Über ein Timer hatte ich auch schon nachgedacht. Habe es auch in ein mini Projekt ausprobiert. Bin aber kein Freund von Timern.

Das Programm wird im FormCreate Bereich nicht beendet. Es wird an mehreren Stellen der Boolesche Wert „StartAbbruch“ abgefragt und mit „Exit“ der FormCreate Bereich verlassen.

Der Hinweis mit dem sicherstellen das die Verbindung zu Datenbank ist auch sehr interessant. Habe es mir eben noch einmal angeguckt und finde es könnte besser abgesichert sein.

@KodeZwerg. Leider verstehe ich deinen Beitrag nicht. Wie meinst du das?

Vielen Dank für eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Windows Programm Login Fenster

  Alt 29. Sep 2020, 13:40
@KodeZwerg. Leider verstehe ich deinen Beitrag nicht. Wie meinst du das?
Was ich meinte zu sagen war,
Du schreibst das im FormCreate ein Login-Formular erzeugt wird bevor Application.Run in Gang gesetzt wird.

Warum nicht gleich in der Initialisierung es auch so behandeln.
Also nicht in der .dpr Datei sondern in der FormCreate-Phase ein "Application.Terminate" oder ähnliches.

In der FormCreate so in etwa
Die MainForm.Visible auf False, LoginForm.Visible auf True
Dein StartAbbruch darin setzen bzw auswerten
und das Visible bzw Terminate dann triggern.

Vielleicht liege ich auch total falsch... wenn dem so ist, Verzeih mir Bitte.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz