Autor |
Beitrag |
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 06.02.04 12:47
Auf der Borland Roadshow wurde mit Delphi 7 eine dbExpress-Anwendung erstellt, die mehrere Instanzen einer Kundentabelle erzeugen konnte.
Hab mal was ähnliches versucht, aber ich weiß nicht mehr, wie die das gemacht haben, dass bei mehreren Instanzen eines Datenmoduls ein neuer Datensatzzeiger verwendet wird. Das ging einfach zu schnell ...
Moderiert von UGrohne: Beiträge geteilt
Zuletzt bearbeitet von UGrohne am Fr 06.02.04 13:57, insgesamt 1-mal bearbeitet
|
|
sakura
      
Beiträge: 137
W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
|
Verfasst: Fr 06.02.04 13:48
_________________ Das Lächeln ist die eleganteste Art dem Gegner die Zähne zu zeigen.
Borland SE
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 06.02.04 14:00
Hmm, das hab ich bei mir gemacht, nur eben nicht mit einem property, sondern mit einer Variablen vom Typ des Datenmoduls. Aber das dürfte doch eigentlich auch funktionieren?
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 06.02.04 19:52
OK, nochmal eine ausführliche Erklärung, da ich diese Postings aus einer anderen Diskussion getrennt habe:
Ich habe eine mdi-Anwendung. Dort jetzt erstmal eine DataModule für die DB-Verbindung über DBExpress. Ein Formular, das Daten aus einer Tabelle anzeigen soll, wird dynamisch erzeugt. Darin befindet sich eine Variable vom Typ eines weiteren DataModules, das das Query beinhaltet. Nach dem Erzeugen setze ich die Quell-Eigenschaften des Queries und verbinde es mit dem DBGrid. Das funktioniert soweit auch, doch sobald ich das Fenster (inkl. dem Datenmodul) dann ein zweites Mal erzeuge, habe ich den gleichen Datensatzzeiger in beiden Queries, d.h. wenn ich im einen Fenster denn Datensatz wechsel, geschieht dasselbe simultan im anderen Fenster. Wie kriege ich das Problem gelöst?
Nochn bisschen Code vom Child:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| private: dmKundenConnection: TdmKundenConnection;
procedure TformKundenliste.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end;
procedure TformKundenliste.setConnection(con:TSQLConnection;name:String); begin with dmKundenConnection do begin sqldsKunden.SQLConnection:=con; sqldsKunden.Active:=true; cdsKunden.Active:=true; end; Caption:=Caption+' '+name; end;
procedure TformKundenliste.FormCreate(Sender: TObject); begin dmKundenConnection:=TdmKundenConnection.Create(Self); end; |
In TdmKundenConnection mache ich gar nichts, da habe ich nur die Komponenten drin.
|
|
sakura
      
Beiträge: 137
W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
|
Verfasst: Fr 06.02.04 20:09
Ich hatte schon gegrübelt wo das hin war  Ich hatte vorher noch einen Fehler in der Erklärung
Hier mal die Lösung wie Bernd und Daniel die auf der RoadShow zeigten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| private: FdmKundenConnection: TdmKundenConnection; function GetDmKundenConnection: TdmKundenConnection; public property DmKundenConnection: TdmKundenConnection read GetDmKundenConnection;
procedure TformKundenliste.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end;
procedure TformKundenliste.setConnection(con:TSQLConnection;name:String); begin with dmKundenConnection do begin sqldsKunden.SQLConnection:=con; sqldsKunden.Active:=true; cdsKunden.Active:=true; end; Caption:=Caption+' '+name; end;
function TformKundenliste.GetDmKundenConnection: TdmKundenConnection; begin if FdmKundenConnection = nil then begin FdmKundenConnection:=TdmKundenConnection.Create(Self); end; Result := FdmKundenConnection; end;
procedure TformKundenliste.FormCreate(Sender: TObject); begin SetConnection(...); end; |
_________________ Das Lächeln ist die eleganteste Art dem Gegner die Zähne zu zeigen.
Borland SE
Zuletzt bearbeitet von sakura am Sa 07.02.04 13:27, insgesamt 2-mal bearbeitet
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 06.02.04 20:21
Danke, das werd ich evtl. heute oder morgen noch ausprobieren.
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 07.02.04 13:15
OK, hab das jetzt mal gestestet, aber leider ohne Erfolg, keine Ahnung woran das liegen könnte. Denn eigentlich ist es doch wurscht, ob ich es über eine Variable mache, oder ein property, steht ja im Hintergrund dasselbe.
Was aber komisch ist: Ich hab noch mehrere DB-Verbindungen und wenn ich jetzt zwei Forms öffne, ihnen aber verschiedene Instanzen der DB-Connection zuweise, es kommt immer nur die erste Verbindung. Hab auch schon überprüft, dass mehrere Objekte erzeugt werden, die liegen alle in unterschiedlichen Adressbereichen.
Das Einzige was bei mir von Deinem Vorschlag abweicht ist, dass ich SetConnection erst nach Erzeugen des Objektes manuell aufrufe und nicht im Konstruktor, aber das dürfte doch nicht das Problem sein, oder?
|
|
sakura
      
Beiträge: 137
W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
|
Verfasst: Sa 07.02.04 13:29
UGrohne hat folgendes geschrieben: | Das Einzige was bei mir von Deinem Vorschlag abweicht ist, dass ich SetConnection erst nach Erzeugen des Objektes manuell aufrufe und nicht im Konstruktor, aber das dürfte doch nicht das Problem sein, oder? |
Das sollte eigentlich nicht den ausschlaggebenden Unterschied machen
Was meinst Du mit " es kommt immer nur die erste Verbindung" ?
_________________ Das Lächeln ist die eleganteste Art dem Gegner die Zähne zu zeigen.
Borland SE
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 07.02.04 14:39
sakura hat folgendes geschrieben: | Was meinst Du mit "es kommt immer nur die erste Verbindung" ? |
Bei zwei unterschiedlichen Datenbankverbindungen bekomme ich immer nur die Daten der ersten Verbindung, ich kann keine Daten von der zweiten Verbindung abfragen, obwohl ich das SQLDataSet mit der SQLConnection der zweiten Instanz vom MainModule verbunden habe.
|
|
|