Autor Beitrag
CONVERTIBLE95
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 16.11.07 11:28 
Ich habe ja einem MDIForm Programm mehrere MDIChild Formulare die auf Ihre Daten zugreifen.
Jetzt möchte ich aber die DB-Zugriffe in DataModule auslagern, also für jedes Formular
ein eigenes Datenmodul.

Soweit stellt das kein Problem dar, doch wenn ich jetzt ein Formular z.B. FKunden ein
zweites mal öffne, um evtl. zwei Kunden zu vergleichen, werden die Daten bei beiden
Formularen synchron angezeigt. Es besteht also keine Möglichkeit unterschiedliche Daten-
sätze anzuzeigen.

Nun dachte ich damit ich bei dem TFKunden.FormCreate einfach auch das Datenmodul
neu erzeuge, also mit

_dataKunden := T_dataKunden.Create(Self);

geht ja auch, doch die Daten werden immer noch synchron angezeigt.

Wie kann ich das lösen damit jedes Formular sein eigenes Datenmodul zugewiesen bekommt?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.11.07 11:34 
:welcome: in der Entwickler-Ecke.

Ist _datakunden auch eine lokale Variable?
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 16.11.07 11:49 
Wenn jedes Formular sein eigenes Datenmodul haben soll, dann brauchst Du doch eigentlich keins, sonder kannst die Komponenten, gleich ins Formular integrieren, oder :?:

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.11.07 11:59 
Kann man. Macht das aber sehr unübersichtlich. Zumindest, wenn man mehr als 2-3 Komponenten auf der Form hat.

Mal abgesehen davon, dass ein DataModul mehr als nur ein Container für Komponenten ist.
CONVERTIBLE95 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 16.11.07 12:19 
_dataKunden = T_dataKunden = class(TDataModule)

also das Datenmodul selbst.

"Wenn jedes Formular sein eigenes Datenmodul haben soll, dann brauchst Du doch eigentlich keins, sonder kannst die Komponenten, gleich ins Formular integrieren, oder"

Wenn es nur 2-3 Komponenten wären nicht, aber es sind meistens um die 30 verschiedene Tabellen die benötigt werden, deshalb will ich das nicht im Formular haben. Ausserdem sollen manche Funktionen auch für andere Formulare zur Verfügung gestellt werden, weil sie auf gleiche
Routinen zugreifen.
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Fr 16.11.07 12:25 
die Datenmodule haben doch sicher einen Namen?
also ala DatenModul2.Table5...
So müsste doch alles von überallher ansprechbar sein, wenn die Datenmodul-Units in der uses stehen.

_________________
Wir haben für jede Lösung das richtige Problem ;)
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.11.07 12:26 
Definiere Dir eine lokale Variable in der Form, wo Du das DataModul einbindest. Nimm nicht die Variable, die im DataModul automatisch erstellt wird.

Dann sollte es theoretisch in jeder Instanz des MDIChild unterschiedlich reagieren.
CONVERTIBLE95 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 16.11.07 12:39 
Mit der lokalen Variable in der Form geht es leider auch nicht.

Ich denke das Problem wird daran liegen weil

z.B. die Eigenschaften der Komponente

tBezeichnug : TDBEdit
...
DataField BEZEICHNUG
DataSource _dataKunden.ds_Kunden
...

also sie verweisen immer auf diese Datasource und deshalb laufen zwei Formulare
synchron wenn ich vor oder zurück blättere
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.11.07 12:40 
Die musst Du natürlich auf die lokale Variable umstellen.
CONVERTIBLE95 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 16.11.07 12:53 
Hab die Variable für das Datenmodul im Formular Kunden erzeuge das Datenmodul bei OnCreate
und die Zuweisung der DataSource für die Felder auch beim OnCreate, aber geht leider nicht.
Gleiche Situation wie vorher auch.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 16.11.07 13:24 
Die beiden Datenmodule greifen doch offensichtlich auf ein und dasselbe Dataset zu. Wie siehts denn damit aus ? Das Datenmodul selber ist eher uninteressant.

_________________
Gruß
Hansa
CONVERTIBLE95 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 16.11.07 13:59 
habe jetzt bei OnCreate:

_daten_Kunden := T_dataKunden.Create(Self);
ds_Kunden := TDataSource.Create(Self);
ds_Kunden.DataSet := _daten_Kunden.tab_Kunden;

tSuchname.DataSource := ds_Kunden;
tName.DataSource := ds_Kunden;
tBezeichnug.DataSource := ds_Kunden;

aber leider geht das auch nicht. Wenn ich jetzt zwei Formulare offen habe, wird nur bei dem ersten die Daten geändert, egal in welchem Formular ich auf Vor oder Zurück Klicke.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.11.07 14:33 
Das kommt mir alles ein bisschen merkwürdig vor.

Wenn man verschiedene Instanzen einer Klasse erzeugt, sollten die auch unabhängig voneinander sein. Irgendwas machst Du falsch. Aber ich kann so nicht erkennen, was das sein sollte.