hmmm, da das ja zum eigentlichen Thema passt:
gegeben sind 3 Dateien:
- Artikel - Felder id, Bez, etc.
- hSaetzeArtikel - n:m Zuordnungstabelle; Felder id, ArtikelID, HSatzID
- hSaetze - Felder id, KurzBez etc.
In der Datenbank existiert die View
Code: Alles auswählen
CREATE OR ALTER VIEW VIEWHSAETZEARTIKEL (ARTIKELID, KURZBEZ)
AS
SELECT HSaetzeArtikel.ArtikelID, LIST(KurzBez, ', ') AS KurzBez
FROM HSaetzeArtikel LEFT JOIN HSaetze ON HSaetzeArtikel.HSatzID = HSaetze.ID
GROUP BY ArtikelID;
Diese View kann ich, wie vorgesehen in jede Abfrage einbauen.
Abfragen im Tool DBeaver laufen korrekt durch.
Selbst im Total-Commander-Viewer läuft alles, wie vorgesehen:
- TC-Lister.PNG (17.63 KiB) 4457 mal betrachtet
In Lazarus gibt es schon bei der Minimum-Abfrage
Code: Alles auswählen
sql := 'SELECT ArtikelID, KurzBez FROM VIEWHSAETZEARTIKEL';
sqlQuery.SQL.text := sql;
sqlQuery.Open;
while not sqlQuery.EOF do
begin
writeln(sqlQuery.FieldByName('KurzBez').AsString);
sqlQuery.Next;
end;
eine Access-Violation im sqlQuery.Open. Ändere ich die Abfrage hingegen in eine (überflüssige?) Funktion:
Code: Alles auswählen
sql := 'SELECT ArtikelID, LIST(KurzBez) AS KurzBez FROM VIEWHSAETZEARTIKEL GROUP BY ArtikelID';
^^^^ ^^^^^^^^
läuft der Code sauber durch und ich kann mit den Daten arbeiten.
Leider ist die Originalabfrage etwas länger (44 Felder aus insgesamt 5 Tabellen) und ich muß dann nach allen Feldern gruppieren.
Aber damit läuft alles sauber durch.
Das Problem besteht unter Lazarus 2.2.4, 2.2.6 und 3.0.
BTW: Auch lazdatadesktop unter 3.0 stürzt beim Zugriff auf die View ab...