Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff v Unterformular auf eine Prozedur des Hauptformulars (https://www.delphipraxis.net/21125-zugriff-v-unterformular-auf-eine-prozedur-des-hauptformulars.html)

MarcusB 28. Apr 2004 10:30


Zugriff v Unterformular auf eine Prozedur des Hauptformulars
 
Ich häng mal wieder :wink:

Ich habe auf meinem Hauptformular eine Prozedur, die eine DB-Verbindung herstellt.
Schlägt diese Verbindung fehl, so wird mit ShowModal ein Unterformular aufgerufen, auf dem man die DB-Einstellungen ändern kann.
Im OnClose-Event dieses Unterformulars würde ich gerne die Verbindungsprozedur aus dem Hauptformular erneut aufrufen, um zu checken ob die Verbindung jetzt klappt. Wenn nicht geht das Spiel von vorne los.

Allerdings komme ich nicht auf die Prozedur zurück !?!
Das Hauptprogramm heisst main, das Hauptformular mForm, aber egal ob ich main.db_connect() oder mForm.db_connect() probiere es klappt nicht.

Ich mach doch da wieder einen brutalen Denkfehler, oder ? :gruebel:

In Erwartung Eurer wie immer kompetenten Antworten,

viele Grüße

Marcus

sakura 28. Apr 2004 10:33

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu
 
Den Ansatz finde ich so generell nicht so gut, aber es ist lösbar.

1. Du musst die Unit des Hauptformulares in die Unit des Setup-Forms nehmen.
2. Du musst das nicht im OnClose sondern im OnCanClose testen (damit Du den User seine Eingaben korrigieren lassen kannst)
3. Aufruf frmMainName.VerbindungsMethode;

...:cat:...

MarcusB 28. Apr 2004 10:41

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu
 
Hm, ich habe das mit dem Einbinden der Hauptunit schon probiert, da meckert aber der Compiler das da ein "überkreuzender Bezug" sei.
Wenn der Ansatz allerdings schon nicht gut ist, wie könnte man es besser machen?

Damit die Anwendung läuft ist zwingend eine korrekte Verbindung zu DB nötig, die muss aber konfigurierbar sein, da verschiedene DBs im Hintergrund verwendet werden können. Die Einstellungen aus dem Unterformular werden in der Registry gespeichert und beim Programmstart dort ausgelesen. (Funktioniert ja auch soweit).
Ist z.Bsp. beim ersten Start da noch nichts drin, soll das Unterformular zur Änderung der Daten aufgerufen werden.
Allerdings muss er ja nach einer Änderung auch wieder checken, ob sich mit den neuen Daten auch eine Verbindung aufbauen lässt.
:drunken:

shmia 28. Apr 2004 10:46

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu
 
Zitat:

Zitat von MarcusB
Im OnClose-Event dieses Unterformulars würde ich gerne die Verbindungsprozedur aus dem Hauptformular erneut aufrufen, um zu checken ob die Verbindung jetzt klappt.
Ich mach doch da wieder einen brutalen Denkfehler, oder ? :gruebel:

Genau :zwinker:
Das Unterformular braucht/darf vom Hauptformular nichts wissen.
(Stell dir vor, du willst das Unterformular in einem anderen Projekt benutzen)
Das Hauptformular benützt das Unterformular; die andere Richtung ist verboten.
Das Unterformular präsentiert die Werte der Steuerelemente über Properties.
Du benötigst wahrscheinlich folgende 4 Properties:
Delphi-Quellcode:
property Servername:string;
property Databasename:string;
property Username:string;
property Password:string;
Delphi-Quellcode:
procedure THauptformular.BeiConnectionFehler;
begin
   if Unterformular.ShowModal = mrOK then
   begin
      // Benutzer hat OK geklickt
      // also mit neuen Einstellungen versuchen zur DB zu verbinden
      Database1.Servername  := Unterformular.Servername;
      Database1.Databasename := Unterformular.Databasename;
      ...
   end
   else
   begin
      // Benutzer hat nicht OK geklickt und hat das Spiel satt
      Application.Terminate;
   end;
end;

MarcusB 28. Apr 2004 11:19

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu
 
Ah, ok. Ich werde das mal so probieren.
Trotzdem würde mich interessieren wie man dieses Problem noch anders lösen könnte.
Vielleicht hat ja noch jemand eine Idee.

Ansonsten kann ich nur sagen :

:dp:

Bowler 18. Mai 2004 12:52

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu
 
Hm. Also ich habe das so verstanden: Dein Hauptformular öffnet über eine Prozedur eine DB-Verbindung. Wenn diese fehlschlägt, dann soll ein Unterformular hochkommen. Wenn das mit z.B. OK geschlossen wird, dann soll nocheinmal der Verbindungsversuch unternommen werden, usw. richtig?

Wie wäre es denn, wenn Du keine globale Instanz des Unterformulars benutzt, sondern das Formular nur lokal erzeugst, solange es benötigt wird?!

z.B:

Delphi-Quellcode:
procedure VerbindungAufbauen;
begin
...
  with TSetupForm.Create(nil) do
  begin
    if ShowModal=mrOK then
    begin
      nochmalVersuchen;
    end;
  end;
  Free;
...
end;
Dadurch wird das Formular dynmamisch erzeugt, und wenn OK aufgerufen wird, dann wird die if-Anweisung TRUE, und der entsprechende Code wird ausgeführt. Dazu muss deinem OK-Button im Setup-Form natürlich der ModalResult-Wert mrOK zugewiesen werden.

Bowler 18. Mai 2004 12:53

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu
 
Hm. Also ich habe das so verstanden: Dein Hauptformular öffnet über eine Prozedur eine DB-Verbindung. Wenn diese fehlschlägt, dann soll ein Unterformular hochkommen. Wenn das mit z.B. OK geschlossen wird, dann soll nocheinmal der Verbindungsversuch unternommen werden, usw. richtig?

Wie wäre es denn, wenn Du keine globale Instanz des Unterformulars benutzt, sondern das Formular nur lokal erzeugst, solange es benötigt wird?!

z.B:

Delphi-Quellcode:
procedure VerbindungAufbauen;
begin
...
  with TSetupForm.Create(nil) do
  begin
    if ShowModal=mrOK then
    begin
      nochmalVersuchen;
    end;
  end;
  Free;
...
end;
Dadurch wird das Formular dynmamisch erzeugt, und wenn OK aufgerufen wird, dann wird die if-Anweisung TRUE, und der entsprechende Code wird ausgeführt. Dazu muss deinem OK-Button im Setup-Form natürlich der ModalResult-Wert mrOK zugewiesen werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 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