Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query als Basis für einen Query? (https://www.delphipraxis.net/78636-query-als-basis-fuer-einen-query.html)

mrose 8. Okt 2006 16:36

Datenbank: MS-Access • Zugriff über: ADO

Query als Basis für einen Query?
 
Hallo,

ich benötige in einem Programm eine Abfrage, welche als Basis keine Tabelle, sondern die Ergebnismenge einer anderen Abfrage hat. In MS-Access kann ich mein Problem mit zwei aufeinander aufbauenden Abfragen problemlos lösen.

Ich benutze Delphi und die ADO Komponenten zur Datenbankverbindung auf MS-Access. Die Basisabfrage funktioniert auch gut (ADOQuery). Nur das Ergebnis dieser Abfrage als Eingangsdatenmenge für die zweite Abfrage zu nehmen bekomme ich nicht hin. :( Das Ergebnis der ersten Abfrage in einer Tabelle speichern ist keine wirkliche Option und Zusammenfassung der Abfragen ist nicht möglich wegen SQL Syntax.



Kann mir jemand mit einem Tip oder Beispiel auf die Sprünge helfen?

Danke
Matthias.

mkinzler 8. Okt 2006 16:37

Re: Query als Basis für einen Query?
 
Wie sehen die Queries aus?

mrose 8. Okt 2006 16:41

Re: Query als Basis für einen Query?
 
Die Basisabfrage ist in MS-Access SQL so:

SELECT Count(ProcessAlarms_1.TagName) AS AnzahlvonTagName, ProcessAlarms.SubType, ProcessAlarms.TagName, ProcessAlarms_1.StartDate, ProcessAlarms_1.ALMTime, ProcessAlarms_1.Type, ProcessAlarms_1.PTDesc, ProcessAlarms_1.ALMType, ProcessAlarms_1.ALMLimit, ProcessAlarms_1.ALPRrior, ProcessAlarms_1.Unit, ProcessAlarms_1.PV, ProcessAlarms_1.X1, ProcessAlarms_1.X2, ProcessAlarms.StartDate
FROM ProcessAlarms RIGHT JOIN ProcessAlarms AS ProcessAlarms_1 ON (ProcessAlarms.SubType = ProcessAlarms_1.SubType) AND (ProcessAlarms.TagName = ProcessAlarms_1.TagName)
GROUP BY ProcessAlarms.SubType, ProcessAlarms.TagName, ProcessAlarms_1.StartDate, ProcessAlarms_1.ALMTime, ProcessAlarms_1.Type, ProcessAlarms_1.PTDesc, ProcessAlarms_1.ALMType, ProcessAlarms_1.ALMLimit, ProcessAlarms_1.ALPRrior, ProcessAlarms_1.Unit, ProcessAlarms_1.PV, ProcessAlarms_1.X1, ProcessAlarms_1.X2, ProcessAlarms.StartDate
HAVING (((ProcessAlarms_1.StartDate)>#11/8/2005 14:14:0# And (ProcessAlarms_1.StartDate)<#11/8/2005 15:14:0#) AND ((ProcessAlarms.StartDate)>#11/8/2005 14:14:0# And (ProcessAlarms.StartDate)<#11/8/2005 15:14:0#))
ORDER BY Count(ProcessAlarms_1.TagName) DESC , ProcessAlarms.TagName, ProcessAlarms_1.StartDate;



Die auf dem Ergebnis aufbauende Abfrage ist:

SELECT Count(Abfrage1.AnzahlvonTagName) AS AnzahlvonAnzahlvonTagName, Abfrage1_1.SubType, Abfrage1_1.TagName, Abfrage1_1.StartDate, Abfrage1_1.ALMTime, Abfrage1_1.Type, Abfrage1_1.PTDesc, Abfrage1_1.ALMType, Abfrage1_1.ALMLimit, Abfrage1_1.ALPRrior, Abfrage1_1.Unit, Abfrage1_1.PV, Abfrage1_1.X1, Abfrage1_1.X2
FROM Abfrage1 INNER JOIN Abfrage1 AS Abfrage1_1 ON Abfrage1.TagName = Abfrage1_1.TagName
GROUP BY Abfrage1_1.SubType, Abfrage1_1.TagName, Abfrage1_1.StartDate, Abfrage1_1.ALMTime, Abfrage1_1.Type, Abfrage1_1.PTDesc, Abfrage1_1.ALMType, Abfrage1_1.ALMLimit, Abfrage1_1.ALPRrior, Abfrage1_1.Unit, Abfrage1_1.PV, Abfrage1_1.X1, Abfrage1_1.X2;

Also etwas einfacher: :lol:

Das Problem ist, das ich es nicht schaffe die beiden Join Typen in einer Abfrage zu verknüpfen.

mkinzler 8. Okt 2006 18:27

Re: Query als Basis für einen Query?
 
Unterstützt ADO derived tables?

WoGe 8. Okt 2006 18:38

Re: Query als Basis für einen Query?
 
Hallo,

man kann eine Query in der mdb Datei definieren und dann von Aussen wie eine Stored Procedure bzw. View verwenden
Ob man die dann allerdings parametrisieren kann, weiss ich leider nicht.

mfg
wo

mrose 8. Okt 2006 18:53

Re: Query als Basis für einen Query?
 
Die Idee mit der Stored Procedure hatte ich auch schon. Das scheitert nur an dem Problem, das ich die MDB hinnehmen muss, wie sie ist (kommt nicht von mir - ich muss sie nur auswerten). Auch habe ich keinerlei Schreibrechte auf die Database.

WoGe 8. Okt 2006 19:00

Re: Query als Basis für einen Query?
 
Hallo,

probier doch mal folgendes: Mach dir eine eigene mdb Datei, an der du alle Rechte hast und Verknüpfe die Original Tabelle damit.
Mit nicht Access-Tabellen funktioniert das jedenfalls.

mfg
wo

mrose 9. Okt 2006 16:48

Re: Query als Basis für einen Query?
 
Ja, das funktioniert auch bei meinem Problem. Danke für den Hinweis.

Letzlich habe ich aber doch einen anderen Workaround gewählt. Ich erzeuge mir immer eine komplette neue MDB mit der Ergebnismenge der ersten Abfrage in einem lokalen temporären Verzeichnis. Im Wesentlichen mache ich das, weil der Anwender die Queries über Parameter bis zur "Unkenntlichkeit" umparametrieren können soll. Das hat den Vorteil, das da die Ergebnismenge der Abfrage1 schon ziemlich kein ist, die Abfrage 2 schneller läuft....

Aber Danke auf jeden Fall für die Anregungen! :-D

Gruß
Matthias.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz