Von Form2 auf Form1 zugreifen
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Die Lösung liegt wo anders.
Im OI werden Komponenten von anderen Formularen nicht zur Auswahl gestellt. Das ist bisher in Lazarus (im unterschied zu Delphi) nicht implementiert.
Du musst das ganze also im OnCreate von Form2 zuweisen (dort bietet es die die Codevervollständigung [ggf. Strg + Space drücken] auch vor):
Im OI werden Komponenten von anderen Formularen nicht zur Auswahl gestellt. Das ist bisher in Lazarus (im unterschied zu Delphi) nicht implementiert.
Du musst das ganze also im OnCreate von Form2 zuweisen (dort bietet es die die Codevervollständigung [ggf. Strg + Space drücken] auch vor):
Code: Alles auswählen
procedure TForm2.FormCreate(Sender: TObject);
begin
//...
Datasource1.Dataset := Form1.SQLQuery1;
//...
Johannes
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Bei mir geht es nicht
Hallo zusammen
Habe es auch probiert.
In meiner Test Anwendung habe ich Form1 und Form2. Auf Form1 habe ich die Datenbankverbindung zu einer Firebird Datenbank. Läuft perfekt. Auf Form2 will ich ein Grid mit der Verbindung von Form1 machen.
Von Form1 kann man zu Form2 wechseln.
Erstens reklamiert er in Form2, wenn ich in Uses Unit1 habe. Zweitens will er die Ergänzung Datasource im Oncreate auch nicht.
Hier meine Source von Unit 1 und Unit2.
Bin mit meinem Latein am Ende. Weiss jemand Rat?
Unit 1:
Unit 2:
unit Unit2;
Habe es auch probiert.
In meiner Test Anwendung habe ich Form1 und Form2. Auf Form1 habe ich die Datenbankverbindung zu einer Firebird Datenbank. Läuft perfekt. Auf Form2 will ich ein Grid mit der Verbindung von Form1 machen.
Von Form1 kann man zu Form2 wechseln.
Erstens reklamiert er in Form2, wenn ich in Uses Unit1 habe. Zweitens will er die Ergänzung Datasource im Oncreate auch nicht.
Hier meine Source von Unit 1 und Unit2.
Bin mit meinem Latein am Ende. Weiss jemand Rat?
Unit 1:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
IBConnection, sqldb, db, DBGrids, StdCtrls, Unit2;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Datasource1: TDatasource;
DBGrid1: TDBGrid;
IBConnection1: TIBConnection;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure Button1Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;
initialization
{$I Unit1.lrs}
end.
Unit 2:
unit Unit2;
Code: Alles auswählen
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, db,
DBGrids, Unit1;
type
{ TForm2 }
TForm2 = class(TForm)
Datasource1: TDatasource;
DBGrid1: TDBGrid;
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form2: TForm2;
implementation
{ TForm2 }
procedure TForm2.FormActivate(Sender: TObject);
begin
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Datasource1.Dataset := Form1.SQLQuery1;
end;
initialization
{$I Unit1.lrs}
end.
-
- 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: Bei mir geht es nicht
Hallo Kuster Peter,
Wenn du in den (oberen) uses-Bereich der unit1 die unit2 schreibst, umgekehrt in den (oberen) uses-Bereich der unit2 die unit1, erzeugst du einen "Kurzschluss" sozusagen. Das Problem kannst du beheben, indem du
1. Im (oberen) uses-Bereich der unit1 die unit2 entfernst,
2. Innerhalb der unit1, direkt unterhalb von "implementation" die Zeile
hinzufügst.
Eventuell erledigt sich damit auch gleich dein zweites Problem, da somit der Kurzschluss beseitigt wurde.
Viele Grüße, Euklid
bei deinem "Erstens" kann ich dir weiterhelfen:Kuster Peter hat geschrieben: Erstens reklamiert er in Form2, wenn ich in Uses Unit1 habe. Zweitens will er die Ergänzung Datasource im Oncreate auch nicht.
Bin mit meinem Latein am Ende. Weiss jemand Rat?
Wenn du in den (oberen) uses-Bereich der unit1 die unit2 schreibst, umgekehrt in den (oberen) uses-Bereich der unit2 die unit1, erzeugst du einen "Kurzschluss" sozusagen. Das Problem kannst du beheben, indem du
1. Im (oberen) uses-Bereich der unit1 die unit2 entfernst,
2. Innerhalb der unit1, direkt unterhalb von "implementation" die Zeile
Code: Alles auswählen
uses unit2;
Eventuell erledigt sich damit auch gleich dein zweites Problem, da somit der Kurzschluss beseitigt wurde.
Viele Grüße, Euklid
-
- Beiträge: 94
- Registriert: So 5. Nov 2006, 18:40
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Berlin
Du kannst natürlich nicht beide units voneinander abhängig machen, damit erzeugst du eine zirkuläre Abhängigkeit, die nicht möglich ist.
Entweder unit2/Form2 wurde noch nicht erzeugt, wenn du von unit1/form1 darauf zugreifen willst oder umgekehrt.
Dadurch ist natürlich dein aufruf in Form2.create auch nicht möglich.
ich würde einfach ein Datenmodul erstellen, das die Datenbank-Anbindung kapselt.
Das Datenmodul kann dann in jedem Formular über uses bei Bedarf eingebunden werden.
Bei Bedarf kann ich dir gerne ein (umfangreiches) Beispiel dazu per mail schicken.
Entweder unit2/Form2 wurde noch nicht erzeugt, wenn du von unit1/form1 darauf zugreifen willst oder umgekehrt.
Dadurch ist natürlich dein aufruf in Form2.create auch nicht möglich.
ich würde einfach ein Datenmodul erstellen, das die Datenbank-Anbindung kapselt.
Das Datenmodul kann dann in jedem Formular über uses bei Bedarf eingebunden werden.
Bei Bedarf kann ich dir gerne ein (umfangreiches) Beispiel dazu per mail schicken.
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Lösung:
Vielen herzlichen Dank, es hat geklappt: (20 Jahre xbase und FoxPro haben leider in meinem Kopf ihre Spuren hinterlassen und ich kämpfe mich Schritt für Schritt in die schöne Welt von Lazarus und SQL)
Mit Hilfe von Alfred und Euklid habe ich es geschafft, ein Gemeinschaftswerk:
Lösung:
Muss im OnActivate stehen. (Lösung von Alfred)
Der Tipp Anstatt oben im Uses bei Implementation einzufügen von Euklid war der zweite wichtige Hinweis, der gefehlt hat. Nun läuft es bestens.
Der Tipp von danny61, eine Form zu erstellen, die nicht angezeigt wird und die man als Datenmodul benützt ist bei grossen Projekten die beste Lösung.
Nun läuft es auch bei mir und ich bin happy.
Peter
Mit Hilfe von Alfred und Euklid habe ich es geschafft, ein Gemeinschaftswerk:
Lösung:
Code: Alles auswählen
Datasource1.Dataset := Form1.SQLQuery1;
Der Tipp
Code: Alles auswählen
Uses From2;
Der Tipp von danny61, eine Form zu erstellen, die nicht angezeigt wird und die man als Datenmodul benützt ist bei grossen Projekten die beste Lösung.
Nun läuft es auch bei mir und ich bin happy.
Peter