ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
Maddias
Lazarusforum e. V.
Beiträge: 60
Registriert: Mo 29. Apr 2019, 09:28
OS, Lazarus, FPC: Windows 11 & Linux, Lazarus 4.6, FPC 3.2.2
Wohnort: Randwick, NSW, Australien
Kontaktdaten:

ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von Maddias »

Hallo zusammen!

Ich habe eine ältere Anwendung, die eine Master-Detail-Beziehung über eine TZQuery und die Eigenschaften MasterSource/MasterFields nutzt. In Lazarus 3.9 funktionierte das einwandfrei. Nach einem Clean-up und Build ... in Lazarus 4.6 (64 Bit) wird das Detail-Dataset jedoch nicht mehr angepasst, wenn ich mich im Master-DataSet weiterbewege . Das ZeosDB-Paket hat die Version 8.0.0.0.

Hat jemand dieses Problem schon einmal gehabt?

Salut,
Mathias

Benutzeravatar
Zvoni
Beiträge: 622
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von Zvoni »

Wie sieht dein Setup aus?

So?

Code: Alles auswählen

var Master,Detail:TzQuery ds_Master:TDatasource;
Begin
  // Create
  Master:=TzQuery.Create(application);
  Detail:=TzQuery.Create(application);
  ds_Master:=TDatasource.Create(application);
  Master.connection:=Zconnection1;
  detail.connection:=Zconnection1;
  ds_Master.dataset:=Master;

  // Master Table
  Master.sql.text:='select * from master_table';
  Master.OPen;

  // Detail Table
  detail.LinkedFields := '<master_table_ID>'; // Fieldname from detail table
  detail.MasterFields := '<ID>'; // Fieldname from master table
  detail.MasterSource := ds_Master;
  detail.sql.text:='select * from detail_table';
  detail.open;
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
Maddias
Lazarusforum e. V.
Beiträge: 60
Registriert: Mo 29. Apr 2019, 09:28
OS, Lazarus, FPC: Windows 11 & Linux, Lazarus 4.6, FPC 3.2.2
Wohnort: Randwick, NSW, Australien
Kontaktdaten:

Re: ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von Maddias »

Hallo Zvoni,

recht herzlichen Dank für Deine Reaktion.

Im Anhang findest Du ein Beispiel Projekt, welches ich für das Team bei ZeosDB erstellt habe. Ohne den Code im Event Handler TfrmMain.qryDepartmentAfterScroll funktioniert das Aktualisieren des Detail-DataSets nicht.

Salut,
Mathias
Dateianhänge
MasterDetailZeosDB.zip
(3.91 KiB) 22-mal heruntergeladen

Benutzeravatar
Zvoni
Beiträge: 622
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von Zvoni »

Müsste für dich dann ungefähr so aussehen
Ungetestet (Hab kein Zeos)

Code: Alles auswählen

var 
qryDepartment,qryEmployee:TzQuery;
ds_qryDepartment:TDatasource;
Begin
  // Create
  qryDepartment:=TzQuery.Create();  //Wird vom Formular übernommen
  qryEmployee:=TzQuery.Create();    //Wird vom Formular übernommen
  
  qryDepartment.connection:=conFirebird;   //Wahrscheinlich im OI verbunden
  qryEmployee.connection:=conFirebird;     //Wahrscheinlich im OI verbunden
  
  ds_qryDepartment:=TDatasource.Create();

  // qryDepartment Table
  qryDepartment.sql.text:='select * from qryDepartment_table';
  qryDepartment.Open;

  // qryEmployee Table
  qryEmployee.LinkedFields := 'Dept_No'; // Foreign Key Fieldname from qryEmployee table
  qryEmployee.MasterFields := 'ID'; // Primary Key Fieldname from qryDepartment table
  qryEmployee.MasterSource := ds_qryDepartment;
  qryEmployee.sql.text:='select * from qryEmployee_table';
  qryEmployee.open;
Und dein Fremdschlüssel "Dept_No" ist wirklich ein String?
Ich habs jetzt mal als Integer interpretiert
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
Maddias
Lazarusforum e. V.
Beiträge: 60
Registriert: Mo 29. Apr 2019, 09:28
OS, Lazarus, FPC: Windows 11 & Linux, Lazarus 4.6, FPC 3.2.2
Wohnort: Randwick, NSW, Australien
Kontaktdaten:

Re: ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von Maddias »

Danke, Zvoni!

Zvoni schrieb:
Und dein Fremdschlüssel "Dept_No" ist wirklich ein String?
Ja, in der Beispieldatenbank von Firebird ist der Primärschlüssel der Tabelle Department die Dept_No als Char(3) Spalte. Insofern ist LinkedFields & MasterFields identisch.

Ich fürchte es handelt sich um ein X.0.0.0 Versionsproblem von ZeosDB. Ich warte im Moment auf eine Antwort des Entwicklers von ZeosDB. Sollte sich da eine Lösung ergeben, dann werde ich selbstverständlich hier berichten.

Salut,
Mathias

Benutzeravatar
lcb-User
Beiträge: 68
Registriert: Di 15. Jul 2014, 13:18
OS, Lazarus, FPC: Linux Mint 22.3 Cinnamon Lazarus 4.6 (rev lazarus_4_6) FPC 3.2.2 x86_64-linux-gt
CPU-Target: 64Bit(win32Bit)
Wohnort: München
Kontaktdaten:

Re: ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von lcb-User »

Hallo :-)

Kann es sein dass bei

Code: Alles auswählen

'Select Emp_No, First_Name, Last_Name, Dept_No'
      'From Employee'
      'Where Dept_No = :Dept_No'
      'Order By First_Name, Last_Name'
das

Code: Alles auswählen

 'Where Dept_No = :Dept_No'
raus muss, weil die Komponente selbst für die Zuordnung sorgt?

nach dem ich noch die
LinkedFields auf DEPT_NO getellt habe
gabs zwar noch eine Fehlermeldung aber es ging dann.
Sonnige Grüße
Bibsi


Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 22.3 - Cinnamon 64-bit, Kernel 6.8.0-106-generic
Lazarus 4.6 (rev lazarus_4_6) FPC 3.2.2 x86_64-linux-gtk2

Benutzeravatar
Zvoni
Beiträge: 622
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: ZeosDB Master-Detail TZQuery in Lazarus 4.6 schlägt fehl

Beitrag von Zvoni »

lcb-User hat geschrieben: Di 31. Mär 2026, 10:35 Hallo :-)

Kann es sein dass bei

Code: Alles auswählen

'Select Emp_No, First_Name, Last_Name, Dept_No'
      'From Employee'
      'Where Dept_No = :Dept_No'
      'Order By First_Name, Last_Name'
das

Code: Alles auswählen

 'Where Dept_No = :Dept_No'
raus muss, weil die Komponente selbst für die Zuordnung sorgt?

nach dem ich noch die
LinkedFields auf DEPT_NO getellt habe
gabs zwar noch eine Fehlermeldung aber es ging dann.
Ist auch meine Vermutung
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten