Zitat:
Ist es da sinnvoller die Anfrage in
Access zu schreiben und die Abfrage zu importieren, oder die Abfrage in eine Delphi
Query zu schreiben?
Das spielt bei
Access imho keine Rolle, weil bei
Access ohnehin immer dein PC die komplette Arbeit übernimmt. Es gibt ja keinen
SQL-Server auf den du den Job abwälzen kannst.
Zitat:
Und alle Tabellen mit allen Daten erstmal zu Joinen dauert zu lange.
Du wirst nicht daran vorbeikommen die Tabellen mit Joins zu verknüpfen.
Wenn du die Joins so gestaltest, das nur geringe Datenmengen zurückgegeben werden, sollte es nicht weig dauern
Beispiel:
Falls bei der
SQL Syntax irgend etwas nicht 100% passt bitte ich um Entschuldigung. Meine
Access Zeiten sind schön länger vorbei ...
SQL-Code:
SELECT P.Pers_Vorname+' '+P.Pers_Name AS [Person]
,Max(K1.Kath1_Datum) AS [Kath1]
,Max(K2.Kath2_Datum) AS [Kath2]
,Max(K3.Kath3_Datum) AS [Kath3]
,Max(K4.Kath4_Datum) AS [Kath4]
FROM Person P
-- erst die Bezugstabellen mit PERSON Inner Joinen ..
INNER JOIN
Pers_b_Kath1 PBK1
ON PBK1.Pers_ID = P.Pers_ID
INNER JOIN
Pers_b_Kath2 PBK2
ON PBK2.Pers_ID = P.Pers_ID
INNER JOIN
Pers_b_Kath3 PBK3
ON PBK3.Pers_ID = P.Pers_ID
INNER JOIN
Pers_b_Kath4 PBK4
ON PBK4.Pers_ID = P.Pers_ID
-- Dann die Kathegorie-Tabellen mit den Bezugstabellen Outer Joinen damit
-- auch leere Kathegorie-Datensätze auftauchen..
LEFT OUTER JOIN
Kathegorie1 K1
ON K1.Kath1_ID = PBK1.Kath1_ID
LEFT OUTER JOIN
Kathegorie2 K2
ON K2.Kath2_ID = PBK2.Kath2_ID
LEFT OUTER JOIN
Kathegorie3 K3
ON K3.Kath3_ID = PBK3.Kath3_ID
LEFT OUTER JOIN
Kathegorie4 K4
ON K4.Kath4_ID = PBK4.Kath4_ID
-- Wenn möglich (unbedingt) mit der WHERE Klausel einen Filter auf die Tabelle Peron setzen
-- um die Result-Datenmenge möglichst klein zu halten
WHERE K.Name='Müller' OR K.Name='Meier'
-- alle "nicht in Aggregatfunktionen eingebundenen Felder" mit GROUP BY gruppieren
GROUP BY P.Pers_Vorname+' '+P.Pers_Name -- ergänzt und korrigiert...
Ich hoffe das ist was Passenndes für dich.
Um die Perfornamce etwas zu steigern, solltest du auf jeden Fall die Felder "Pers_ID" und "KathX_ID" in allen relevanten Tabellen indizieren.
Schöne Grüße,
Jens