Von Form2 auf Form1 zugreifen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Kuster Peter
Beiträge: 205
Registriert: So 2. Dez 2007, 20:47
OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
CPU-Target: xxBit
Wohnort: Schweiz

Von Form2 auf Form1 zugreifen

Beitrag von Kuster Peter »

Hallo, wieder eine Anfängerfrage:

Ich will folgendes: Ich habe z. B. Form1 als Eingangsmaske. Nun will ich Daten erfassen. Starte Form 2 und will dort die Daten erfassen. Damit ich jedoch nicht auf jedem Form eine Datenbankverbindung machen muss mache ich die Verbindung auf Form1 und greife dann von Form2 oder Form3 je nach dem auf die Verbindung auf Form1 zu. Wie bringe ich diese Verbindung zusammen.

Peter

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Von Form2 auf Form1 zugreifen

Beitrag von Euklid »

Kuster Peter hat geschrieben:Wie bringe ich diese Verbindung zusammen.
Hallo Peter,

wenn ich deine Frage richtig verstanden habe, sieht die Lösung so aus:

Füge in den uses-Bereich der units aller Forms, mit denen du auf die Form1 zugreifen möchtest, den Namen der unit der Form1 hinzu.
Wenn die Unit der Form1 also unit1 heißt, dann in den uses-Bereich der anderen Formen "unit1" hinzufügen, etwa so:

Code: Alles auswählen

uses blabla, blubb, unit1;
Der Zugriff erfolgt dann z.B. durch
Form1.Datenbankverbindung.irgendwas; ;)

Viele Grüße, Euklid
Zuletzt geändert von Euklid am Fr 4. Apr 2008, 14:04, insgesamt 2-mal geändert.

Chericks
Beiträge: 9
Registriert: Di 25. Mär 2008, 10:54

Beitrag von Chericks »

in der unit von form2 trägst du unter uses die unit von form1 ein.
danach müßtest du auf form1.datenbankkomponente zugreifen können.

Chericks
Beiträge: 9
Registriert: Di 25. Mär 2008, 10:54

Beitrag von Chericks »

mist zu langsam :D

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Schon seltsam - da antwortet 2 Stunden lang niemand, und dann zwei zur gleichen Zeit... *g*

Kuster Peter
Beiträge: 205
Registriert: So 2. Dez 2007, 20:47
OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
CPU-Target: xxBit
Wohnort: Schweiz

von Form 2 auf Form 1 zugreifen

Beitrag von Kuster Peter »

Danke :D so werde ich es machen.

Ich habe nur noch eine Frage: Wenn ich Form 2 wie folgt starte:

procedure TForm1.Button1Click(Sender: TObject);
begin
with TForm2.create(self) do
begin
Show;
end;

end;

Dann ist Form2 am Anfang ja nicht im Speicher. Wenn ich Form 2 mit Close schliesse, ist es dann auch aus dem Speicher entfernt?

Man muss ja schauen, dass man nicht zuviel Speicher belegt.

Peter

Chericks
Beiträge: 9
Registriert: Di 25. Mär 2008, 10:54

Beitrag von Chericks »

würde im form2.close noch folgende zeile hinzufügen:
closeaction:=cafree;

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Du könntest im OnClose bei Form2 noch ein Destroy aufrufen, ob das geht weiß ich nicht, Chericks deine Lösung würde glaube ich aber kein speicher frei geben. Sondern einfach nur entscheiden ob das From geschlossen werden darf oder nicht.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Dann ist Form2 am Anfang ja nicht im Speicher. Wenn ich Form 2 mit Close schliesse, ist es dann auch aus dem Speicher entfernt?
Nein es wird aber beim beenden deines programms automatisch von seinem Parent (Application) freigegeben. Closeaction ist per default auf caFree. Is also nicht nötig zu setzen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Nein er meint. beim beenden von From2. Weil beim vor dem aufrufen wird es ja wieder Installsiert.
Also müsste Kuster Peter zu erst prüfen ob es schon ein was Fertiges gibt von From2 wenn ja braucht er es ja nicht wieder installisieren. also sowas:
if not assigned(from2) then from2:=....
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Hatte ich übersehn, ist ja auch rechtg unüblich forms per hand zu erstellen ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja, ich frage mich warum lässt er sie nicht Autmaitsch erstellen. Ist doch viel einfacher...
Und soviel speicher platzt belegt das auch nicht oder ?
MFG
Michael Springwald

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Euklid,

ich komme mit deinem Vorschlag leider noch nicht ans Ziel.

Folgendes habe ich:

Form1: IBConncetion1, SQLTransaction1, SQLQuery1, Datasource1

Form2: DBgrid1, Datasource1
unter uses: p8_f1 als unit-Name der Form1
wenn ich in der Datasource1 der Form2 unter DataSet Form1.SQLQuery1 eingebe
erhalte ich "ungültiger Eigenschaftswert".

Gruß
Alfred

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo alfred,

Form1.SQLQuery1 funktioniert nur, wenn die SQLQuery ein Teil der Form1 ist. Wenn es sich dabei um eine eigenständige Klasse handelt, kannst du in der Regel über den Klassennamen darauf zugreifen.

Viele Grüße, Euklid

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Euklid,

Klassen sind noch eine Blackbox für mich. Ich weiß zwar was der Sinn ist. Nur in
der praktischen Anwendung habe ich noch Probleme.

Der Quelltext von Form 1 sieht wie folgt aus:

Code: Alles auswählen

Type
  { TForm1 }
  TForm1 = class(TForm)
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;
    IBConnection1: TIBConnection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
  private
  public
end;

Gruß
Alfred

Antworten