![]() |
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. |
Re: Query als Basis für einen Query?
Wie sehen die Queries aus?
|
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. |
Re: Query als Basis für einen Query?
Unterstützt ADO derived tables?
|
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 |
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.
|
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 |
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