Datenmodul
-
- 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
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
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
-
- 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
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
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
-
- 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
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
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
-
- 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:
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.
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:
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
Code: Alles auswählen
edname1.Datasource := fdmAdressen.dsAdressen
edname1.DataField := 'FeldbezeichnungInTabelle';
Johannes
-
- 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:
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...
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/
-
- 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
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.
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)
(Ringelnatz)
-
- 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
-
- 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:
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.
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/
-
- 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
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.
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)
(Ringelnatz)
-
- 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