AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung haben

zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung haben

Ein Thema von Ozoras · begonnen am 17. Mai 2019 · letzter Beitrag vom 20. Mai 2019
Antwort Antwort
Ozoras

Registriert seit: 20. Nov 2010
4 Beiträge
 
#1

zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung haben

  Alt 17. Mai 2019, 10:49
Hallo,


ich habe ein relativ große Programm in Delphi geschrieben und nun wurde ich gebeten einen Majormode hinzuzufügen (Auswahl-Bildschirm).

Das Programm startet automatisch beim Einloggen. Dann taucht der Auswahlbildschirm auf, auf dem man quasi entweder das Porgramm an sich startet oder eben Administrative Sachen machen kann. Auch Log-file anschauen und eine Art Demo-Mode wurden implementiert.


Ich hatte das so gedacht, dass über den majormode die anderen Fenster (Programm, Administration, Einstellungen usw) als modales Fenster zu starten. Das hat den Vorteil, dass immer nur ein Fenster aktiv ist und man nicht mehrere gleichzeitig starten kann.


Wenn man man nun sagt, dass man das eigentliche Programm starten will. dann werdem bei create die nötigen DB-Verbindungen erstellt und auch eine Komponente um ein Relais anzusteuern.

Nun dachte ich "hey, man kann das ja Starten, beenden, starten" so dass ich die Verbindungen bei Onshow verbinden lasse. Zum einem habe dann lernen müssen. dass ein Form.close nicht im Form.Onshow gemacht werden kann (meist Verbindung Ja dann Ok, ansonsten gib Meldung und schliesse). hat dazu irgendjemand eine Idee am Rande? Habe eine Lösung, welche mir pesönlich nicht gefällt.


Das Problem ist nun, dass erst bei Form.Destroy die Komponenten frei gegeben werden. Wenn jetzt nach erfolgreichern Einsatz der Majormode aufgerufen wird und der Server über nacht dank backUp nicht mehr erreicht wird, dann kommen Verbindungsfehler .... die ganze Nacht. Wie kann ich das verhindern, bei Form.onclose sage ich immer trenne Verbindung zu DB und Relais .... leider ist es dem Programm egal ...


Ok, ich hoffe, dass man mein Problem versteht, wenn nicht schreibe ich die fehlenden Informationen dazu. Ich will auch keinen Quellcode ... eventuell nur Tipps, was ich falsch mache, was ich vergessen haben könnte oder eventuell hat jemand eine coole Idee, welche passen könnte
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
273 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung habe

  Alt 17. Mai 2019, 12:11
Warum prüfst du nicht beim Klick auf den Button, ob eines der anderen Fenster geöffnet ist / angezeigt wird und verhinderst dann ggf. das öffnen des neuen Fensters?
Ganz stumpf (und nur vom PRINZIP):
Delphi-Quellcode:
if Form2.visible or
   Form3.visible or //auch nicht sich selber versuchen nochmal zu öffnen
   Form4.visible then //für jede weitere Form ein weiteres "or"
begin
  showmessage('Bitte erst das andere Fenster schließen.');
  exit;
end else
begin
  Form3.visible := true;
  //hier dann die Datenverbindung herstellen
end;

//im onClose & onDestroy des jeweiligen Forms dann die Datenverbindung trennen
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (17. Mai 2019 um 13:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.254 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung habe

  Alt 17. Mai 2019, 12:21
Moin...
Form2.visible = true ...viel mehr kann man nicht falsch machen.
Besser:
1. Self statt Form2
2. Niemals auf "true" prüfen.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
368 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung habe

  Alt 17. Mai 2019, 12:36
Hallo,


ich habe ein relativ große Programm in Delphi geschrieben und nun wurde ich gebeten einen Majormode hinzuzufügen (Auswahl-Bildschirm).

Das Programm startet automatisch beim Einloggen. Dann taucht der Auswahlbildschirm auf, auf dem man quasi entweder das Porgramm an sich startet oder eben Administrative Sachen machen kann. Auch Log-file anschauen und eine Art Demo-Mode wurden implementiert.


Ich hatte das so gedacht, dass über den majormode die anderen Fenster (Programm, Administration, Einstellungen usw) als modales Fenster zu starten. Das hat den Vorteil, dass immer nur ein Fenster aktiv ist und man nicht mehrere gleichzeitig starten kann.


Wenn man man nun sagt, dass man das eigentliche Programm starten will. dann werdem bei create die nötigen DB-Verbindungen erstellt und auch eine Komponente um ein Relais anzusteuern.

Nun dachte ich "hey, man kann das ja Starten, beenden, starten" so dass ich die Verbindungen bei Onshow verbinden lasse. Zum einem habe dann lernen müssen. dass ein Form.close nicht im Form.Onshow gemacht werden kann (meist Verbindung Ja dann Ok, ansonsten gib Meldung und schliesse). hat dazu irgendjemand eine Idee am Rande? Habe eine Lösung, welche mir pesönlich nicht gefällt.


Das Problem ist nun, dass erst bei Form.Destroy die Komponenten frei gegeben werden. Wenn jetzt nach erfolgreichern Einsatz der Majormode aufgerufen wird und der Server über nacht dank backUp nicht mehr erreicht wird, dann kommen Verbindungsfehler .... die ganze Nacht. Wie kann ich das verhindern, bei Form.onclose sage ich immer trenne Verbindung zu DB und Relais .... leider ist es dem Programm egal ...
Verabschiede dich einfach vonn autocreated forms, jedenfalls für dieses (nun modale) "Programm"-Form. Erzeuge das Form, wenn es vom "Major mode"-Form aufgerufen wird und zerstöre es, wenn der Benutzer es schließt. Die sauberste Methode dafür (meiner unbescheidenen Meinung nach ) ist es, dem Form eine public class function zu verpassen, die das erledigt und vom major mode aufgerufen wird. Sowas wie

Delphi-Quellcode:
function TProgramform.Execute: boolean;
var
  LForm: TProgramform;
begin
  Result := false;
  if PreconditionsVerified then begin
    LForm := TProgramform.Create(nil);
    try
      Result := LForm.ShowModal = mrOK;
    finally
      LForm.Free;
    end;
  end; {if}
end;
PreconditionVerified wäre eine andere class function, die prüft, ob notwendige Vorbedingungen erfüllt sind, z. B. eine Datenbankverbindung existiert. Zu versuchen, ein Form während des Vorgangs der Erzeugung wieder zu schließen, weil irgendwas fehlt, ist ein übler Anfängerfehler; man sollte immer vorher sicherstellen, dass das Form seine Aufgabe auch erfüllen kann.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
273 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung habe

  Alt 17. Mai 2019, 12:42
Moin...
Form2.visible = true ...viel mehr kann man nicht falsch machen.
Besser:
1. Self statt Form2
2. Niemals auf "true" prüfen.
Dann belehre mich gerne eines besseren (es ging ja auch nur erst mal ums Prinzip).

Wie soll man hier auf "self" prüfen, wenn man andere Forms abfragen möchten. Self ist doch nur für das aktuell aktive oder nicht?

Das mit dem True habe ich nur für das Verständnis gemacht, damit er weiß was gemeint ist. Habe es aber mal abgeändert.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (17. Mai 2019 um 12:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.254 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung habe

  Alt 19. Mai 2019, 05:02
Moin...
Zitat:
Dann belehre mich gerne eines besseren (es ging ja auch nur erst mal ums Prinzip).
Du hast deinen Beitrag geändert. In deiner aktuellen Version gibt des den Text "Form2.visible" nicht. In der vorgehenden Version war es nicht ersichtlich, daß es sich um mehrere Forms handelt. Und für die aktuelle Form ist Self angebrachter.
Zitat:
es ging ja auch nur erst mal ums Prinzip
...Im Prinzip ist es aber auch schlecht, bezogen auf "True", wenn man Anfängern falsche Informationen gibt. Bei Ihnen besteht "lernen" meistens aus Copy/Paste.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
273 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: zweites Formular (vordefiniert) soll wenn nicht sichtbar keine DB-Verbindung habe

  Alt 20. Mai 2019, 10:26
Moin...
Zitat:
Dann belehre mich gerne eines besseren (es ging ja auch nur erst mal ums Prinzip).
Du hast deinen Beitrag geändert. In deiner aktuellen Version gibt des den Text "Form2.visible" nicht. In der vorgehenden Version war es nicht ersichtlich, daß es sich um mehrere Forms handelt. Und für die aktuelle Form ist Self angebrachter.

Bezüglich der aktuellen Form stimme ich dir zu. Allerdings habe ich extra mit Form2 angefangen (und bis Form4 weiter geführt) und nicht mit Form1 (welches ich als "Mainform" sehen würde = immer sichtbar).

Zitat:
es ging ja auch nur erst mal ums Prinzip
...Im Prinzip ist es aber auch schlecht, bezogen auf "True", wenn man Anfängern falsche Informationen gibt. Bei Ihnen besteht "lernen" meistens aus Copy/Paste.

Aber meinst du ein Anfänger weiß, das bei "Form2.visible" darauf geprüft wird, das es sichtbar ist? Ich denke eher nicht, daher hatte ich das True mit angefügt.
Es war ja nur gut gemeint XD
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (20. Mai 2019 um 12:23 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf