Datenmodul

Für Fragen rund um die Ide und zum Debugger
Antworten
moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Datenmodul

Beitrag von moritz »

Hallo, nach langer Zeit will ich mich doch mal wieder mit Lazarus beschäftigen. Hatte früher mal mit Turbopascal und Kylix zu tun. Ist aber lange her. Seitdem nur noch mit VBA / Starbasic.
Ich habe ein Projekt mit Datenbankzugriff (Firebird).
Der Komponenten für den Datenbankzugriff sind in einem Datenmodul zusammengefasst, funktioniert auch so.
In einem anderen Formular sollen die Daten angezeigt werden (TDBEdit usw.). Wie kann ich erreichen, daß im Objektinspektor bei datasource meine Datenquellen zur Auswahl angezeigt werden? Bei Kylix gab es meines Wissens die Möglichkeit der Formularverknüpfung Menüpunkt Datei- Unit verwenden.
Das Datenmodul ist in der uses- Klausel mit aufgeführt, trotzdem wird es nicht verwendet.

Hab gerade gefunden, daß Lazarus Datenmodule nicht richtig unterstützt. Wie kann man das Problem am besten umgehen, da ich von mehreren Forms aus auf die Daten zugreifen muß?
Danke
Moritz

monta
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:

Beitrag von monta »

Das gabs hier schonmal irgendwo.

Sollte sich da nichts getan haben, hilft nur, es zur Laufzeit zuzuweisen. So mach ich es auch immer. Und anstatt des Datenmoduls eventuell ne normale Form nehmen, die eben nie als solche im fertigen Programm erscheint.
Johannes

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Klärt mich 'mal auf.

Ich bin immer davon ausgegangen, dass Datenmodule im Prinzip Forms sind, denen nur einige Properties zum Anzeigen zur Laufzeit fehlen, die sich aber zur Designzeit wie normale Forms verhalten und eigentlich mit Datenbanken technisch nichts zu tun haben. Man kann sie also auch für andere Sachen benutzen, wenn man irgendetwas zur Designzeit grafisch platzieren will, das zur Laufzeit nicht sichtbar wird (z.B. TTimer).

Ist das falsch ?

- Michael

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Beitrag von moritz »

Ja, so hab ich das auch verstanden.

Mit der Zuordnung von Daten zur Laufzeit tu ich mich bei Lazarus noch etwas schwer. Ich habe also ein Datamodul "dmAdressen" mit einer Datenquelle "dsAdressen". Außerdem habe ich ein Formular "fAdressen" mit TDBEdit "edname1". Die Zuordnung zu einem Datenfeld der Datenquelle ist vorhanden. Wie kann ich jetzt die Datenquelle zur Laufzeit zuordnen.
Was muß ich bei "edname1" eintragen?

Wäre das so richtig:
procedure TfAdressen.FormCreate(Sender: TObject);
begin
edname1.Datasource:=fdmAdressen.dsAdressen
end;

Moritz

monta
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:

Beitrag von monta »

Schon richtig, nen Datenmodul ist letztlich nur dazu da, um die nichtvisuellen Komponenten schön gebündelt und übersichtlich im Projekt zur verfügung stellen zu können.

Aber das Laz-Datenmodul ist/war etwas verbugt, daher der Tip, ne normale Form zu nehmen. Genau genohmen ist das Datenmodul ja irgendwie auch überflüssig, wenn man es so betrachtet und durch ne Form ersetzt, eben um die Probleme zu umgehen.
Das ändert aber nichts daran, das Komponenten andere Forms, die in Delphi im OI angezeigt würden, in Lazarus nicht zur Verfügung stehen.

Eventuell kommst du besser, nur bis zur Query alles auf eine Form zu packen und die TDataSource dann auf die Zweite, so musst du nur das Dataset der Datasource zur Lafzit zuweisen und nicht alle DBEdits usw.

Code: Alles auswählen

Datasource.Dataset := Form_Datenmodul.QueryXYZ
obiges Beispiel sollte aber auch gehen mit eventuell mehr schreibaufwand, allerdings fehlt dort dein Datafield, es sei den, es handelt sich um nen DBGrid, aber ich geh mal durch 'ed' von nem DBEdit aus:

Code: Alles auswählen

edname1.Datasource := fdmAdressen.dsAdressen 
edname1.DataField := 'FeldbezeichnungInTabelle';
Johannes

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Beitrag von moritz »

Vielen Dank,
die erste Variante klingt richtig gut, so wird es wohl funktionieren.
Danke
Moritz

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 »

Das Laz Datenmodul ist nicht verbuggt, ne Form zu nehmen bringt nur was wenn man LazReport verwenden will.

Hintergrund:
Unter Delphi hat TApplication eine Property Datamodules.
Das ist bei Lazarus schlichtweg noch nicht implementiert deshalb kann Lazreport keine Datamodules durchsuchen. Wenn man alle Daenquellen auf ne Form packt gehts.
Das selbe spielchen mit dem Objektinspector. Der durchsucht erst gar keine außer der aktuellen Form nach Datasources deshalb kannst du nicht wie bei Delphi auf einer Form die Datasources eines Datamodules auswählen. Beides etwas lästig wenn man grössere datenbankanwendungen bastelt, man muss halt die Datasources zur Laufzeit zuweisen was aber auch vorteile hat wenn man mal schnell wieder zur Laufzeit alles aushängen muss...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Dann sollte man das langsam mal implementieren!

Ist wirklich schon etwas lästig, das jedesmal von Hand zu machen. Und alles auf die Form packen, also incl. der DB-Verbindung, ist ja nun wirklich nicht der Weisheit letzter Schluss.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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 »

Mach doch
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@Christian

Meinst Du das macht Sinn? Ich hab jetzt auf SVN umgestellt, wäre also machbar. DataModules ist übrigens in TScreen bei Delphi implementiert, wäre also nicht soviel Aufwand.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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 »

Hä Datamodules ist in TScreen implementiert ?
Also 1. Schau dir den Delphi Code dazu gar nicht erst an Codegear macht schon genug stress weil n paar Variablen genauso heissen wie im Delphi also implementier es selbst wenn du was machen willst.
Datamodules haben mit TScreen überhaupt nichts zu un ich weiss nich was du damit meinst.

Das was hauptsächlich fehlt ist die Eigenschaft Datamodules in TApplication. Weiterhin muss der OI natürlich alle Forms und Datamodules nach DataSources durchsuchen wenn die Property Datasource ist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Siehste, und genau die Property's sind bei Delphi in TScreen eingebaut. Das macht ja auch irgendwie Sinn. Das Modul ist in jedem Fall da, weil das eine Eigenschaft von TApplication ist. Ist Application initialisiert gilt das auch für die Eigenschaft Screen. In TScreen ist DataModules als TList implementiert und dazugehörig AddDataModules. Zusätzlich noch DataModulesCount als Property, damit hat man dann vollen Zugriff auf alle, in der Applikation, angelegten DataModule.

Hauptarbeit dürfte wohl die Initialisierung beim Einfügen eines DM sein und die Abfrage im OI.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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 »

OK, scheins rech zu haben wobei das für mich überhaupt keinen Sinn macht ich hatte es auch so in erinnerung das Forms und Datamodules Eigenschaften von TApplication sind aber da hab ich mich geirrt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Ist mir auch gerade eingefallen warum, du kannst die auch für WebApps und ähnliches benutzen. Da hat man kein TApplication-Objekt, das TScreen-Objekt aber immer. Bei denen würde das sonst nicht gehen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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 »

Ja Trotsdem find ich TApplication sinvoller WebApps sollten halt auch ein Application Objekt haben sind schliesslich auch Applications
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten