[gelöst] Link zu DataModule in Design Time

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
musicones
Beiträge: 35
Registriert: Di 8. Sep 2009, 09:13
OS, Lazarus, FPC: Win 10 (L 1.6.2 FPC 3.0.0)
CPU-Target: 64Bit

[gelöst] Link zu DataModule in Design Time

Beitrag von musicones »

Hallo,

ich möchte meine Anwendung mit den Daten einer Embedded Firebird Datenbank füttern. Üblicherweise trenne ich den Teil der Datenmengen und der UI voneinandern,
in dem ich die Datenmengen in DataModules lege und vom Formular auf die entsprechenden DataModule aus der entsprechenden Komponente (z.B. TDBGrid) verlinke.

Ich nutze die Lazarus Standardkomponenten:
SQLdb -> TIBConnection, TSQLTransaction, TSQLQuery
Data Access -> TDataSource
Data Controls -> TDBGrid

Folgendermaßen habe ich es versucht umzusetzen:

DatabaseModule: TDataModule enthält: TIBConnection, TTransaction

ContactsModule: TDataModule enthält:
TTransaction -> verlinkt zu DatabaseModule.IBConnection
(das ist übrigens die einzige Verlinkung die funktioniert. Wird zwar nicht angezeigt im Property Editor, kann ich aber manuell reinschreiben und es wird akzeptiert.
Es geht aber auch nur, wenn die Datenbank aktiv ist. )
TSQLQuery -> verlinkt zu TTransaction auf dem gleichen DataModule

Weiterhin habe ich zwei verschiedene Ansätze getestet:
In beiden Fällen wird die Verlinkung nicht angenommen.

1. TDataSource liegt im ContactsModule und wird auf TSQLQuery verlinkt
Der Versuch vom ContactsForm.Grid.DataSource zu ContactsModule.DataSource zu verlinken funktioniert nicht.

2. TDataSource liegt im ContactsForm und wird auf das Grid verlinkt
Der Versuch vom ContactsForm.DataSource.DataSet zu ContactsModule.SQLQuery zu verlinken funktioniert nicht.

Was bedeutet "funktioniert nicht":

Im uses sind die entsprechenden units eingetragen, z.B. im ContactsForm .... uses mContacts (ContactsModule)
Ich habe die uses Einträge sowohl im interface teil, als auch im implementation teil versucht (natürlich nicht gemeinsam)

1. Der Link wird nicht im Object Inspector angezeigt, beispiel, wenn auf man auf DataSource oder DataSet klickt, sollte ja dann die mögliche Verlinkung angegeben werden
2. Der Versuch die Verlinkung manuell in das Property Feld einzutragen führt zu folgender Fehlermeldung: 'Ungültiger Eigenschaftswert'

Irgendwie kann ich mir nicht vorstellen, dass das nicht geht. Es arbeiten ja wohl einige mit Datenbanken in Lazarus und es gibt ja auch eine Menge an Infos im Wiki etc.

Zur Info, ich habe diese Anfrage bereits im Englischen Forum gepostet und auch mal den Thread zum Thema Crossposting gelesen. Ich wiederhole es im Deutschen Forum also bewusst,
einfach weil ich derzeit einfach nicht weiterkomme. Zudem habe ich den Thread dort nicht erstellt, sondern einen bereits älteren Thread durch meinen Post wiederbelebt. Dort gab es auch keine zufriedenstellende Antwort.

Danke für die Mühe
Gruß
musicones
Zuletzt geändert von musicones am Sa 12. Sep 2009, 09:29, insgesamt 1-mal geändert.

musicones
Beiträge: 35
Registriert: Di 8. Sep 2009, 09:13
OS, Lazarus, FPC: Win 10 (L 1.6.2 FPC 3.0.0)
CPU-Target: 64Bit

[gelöst:] Re: Link zu DataModule in Design Time

Beitrag von musicones »

Hallo nochmals,

ich habe gestern Lazarus 0.9.27 Snapshot. Dort scheints zu funktionieren. Das Testprojekt lies sich zwar nicht kompilieren, aber die Links wurden angenommen und im Grid konnten Spalten erstellt werden. Ich vermute also einen Bug im aktuellen Release. Ich warte einfach auf das nächste...


Nachtrag:
Ich habe jetzt herausgefunden warum das ganze so nicht funktioniert hat. Üblicherweise erstelle ich Datenmodule runtime an der entsprechenden Stelle an der ich sie benötige und gebe sie dann wieder frei. Dazu muss man das Create in der Projektdatei rausschmeissen. Wenn man dies aber macht, dann erkennen die Controls die DataSources bzw. Querys im Datenmodul nicht mehr. In Delphi ist das ohne weiteres möglich, Lazarus unterstützt das wohl nicht, ob Bug oder Feature ist mir nicht klar. Aber zumindest ist das Rätsel gelöst.

Gruß
musicones

Antworten