AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriff v Unterformular auf eine Prozedur des Hauptformulars
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff v Unterformular auf eine Prozedur des Hauptformulars

Ein Thema von MarcusB · begonnen am 28. Apr 2004 · letzter Beitrag vom 18. Mai 2004
Antwort Antwort
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#1

Zugriff v Unterformular auf eine Prozedur des Hauptformulars

  Alt 28. Apr 2004, 10:30
Ich häng mal wieder

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 ?

In Erwartung Eurer wie immer kompetenten Antworten,

viele Grüße

Marcus
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu

  Alt 28. Apr 2004, 10:33
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;

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#3

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu

  Alt 28. Apr 2004, 10:41
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu

  Alt 28. Apr 2004, 10:46
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 ?
Genau
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;
Andreas
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#5

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu

  Alt 28. Apr 2004, 11:19
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 :

  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#6

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu

  Alt 18. Mai 2004, 12:52
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.
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: Zugriff v Unterformular auf eine Prozedur des Hauptformu

  Alt 18. Mai 2004, 12:53
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.
Christian Rüsken
  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 06:14 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