Autor Beitrag
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 ... :cry:

Moderiert von user profile iconUGrohne: Beiträge geteilt


Zuletzt bearbeitet von UGrohne am Fr 06.02.04 13:57, insgesamt 1-mal bearbeitet
sakura
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 137

W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
BeitragVerfasst: Fr 06.02.04 13:48 
UGrohne hat folgendes geschrieben:
dass bei mehreren Instanzen eines Datenmoduls ein neuer Datensatzzeiger verwendet wird. Das ging einfach zu schnell ... :cry:

Das war ganz einfach. Im OnCreate Ereignis des MDI.Child wurde einfach eine neue Instanz des DatenModuls erstellt.

ausblenden Delphi-Quelltext
1:
FDatenModul := TDatenModu.Create(self);					


Also keine Zauberei ;-)

:welcome:

_________________
Das Lächeln ist die eleganteste Art dem Gegner die Zähne zu zeigen.
Borland SE
UGrohne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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:
ausblenden 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;

//Hier wird die Datenquelle zugewiesen (muss dynamisch sein!)
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;

//Beim Erzeugen des Formulars erzeuge ich das DataModule
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
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 137

W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
BeitragVerfasst: Fr 06.02.04 20:09 
Ich hatte schon gegrübelt wo das hin war :shock: Ich hatte vorher noch einen Fehler in der Erklärung :oops:

Hier mal die Lösung wie Bernd und Daniel die auf der RoadShow zeigten ;-)

ausblenden volle Höhe 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:
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

//Hier wird die Datenquelle zugewiesen (muss dynamisch sein!) 
procedure TformKundenliste.setConnection(con:TSQLConnection;name:String); 
begin 
  with dmKundenConnection do begin 
     sqldsKunden.SQLConnection:=con; 
     sqldsKunden.Active:=true; 
     cdsKunden.Active:=true; 
     end
  // > Dataset mit Datenmodul verbinden ;-)
  Caption:=Caption+' '+name; 
end

//Beim Erzeugen des Formulars erzeuge ich das DataModule 
function TformKundenliste.GetDmKundenConnection: TdmKundenConnection;
begin 
  if FdmKundenConnection = nil then begin
    FdmKundenConnection:=TdmKundenConnection.Create(Self); 
    // mgl. weitere Aufgaben
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

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

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 137

W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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.