AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Query als Basis für einen Query?
Thema durchsuchen
Ansicht
Themen-Optionen

Query als Basis für einen Query?

Ein Thema von mrose · begonnen am 8. Okt 2006 · letzter Beitrag vom 9. Okt 2006
Antwort Antwort
mrose

Registriert seit: 21. Feb 2005
22 Beiträge
 
#1

Query als Basis für einen Query?

  Alt 8. Okt 2006, 16:36
Datenbank: MS-Access • Zugriff über: ADO
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Query als Basis für einen Query?

  Alt 8. Okt 2006, 16:37
Wie sehen die Queries aus?
Markus Kinzler
  Mit Zitat antworten Zitat
mrose

Registriert seit: 21. Feb 2005
22 Beiträge
 
#3

Re: Query als Basis für einen Query?

  Alt 8. Okt 2006, 16:41
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:

Das Problem ist, das ich es nicht schaffe die beiden Join Typen in einer Abfrage zu verknüpfen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Query als Basis für einen Query?

  Alt 8. Okt 2006, 18:27
Unterstützt ADO derived tables?
Markus Kinzler
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Query als Basis für einen Query?

  Alt 8. Okt 2006, 18:38
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
  Mit Zitat antworten Zitat
mrose

Registriert seit: 21. Feb 2005
22 Beiträge
 
#6

Re: Query als Basis für einen Query?

  Alt 8. Okt 2006, 18:53
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.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Query als Basis für einen Query?

  Alt 8. Okt 2006, 19:00
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
  Mit Zitat antworten Zitat
mrose

Registriert seit: 21. Feb 2005
22 Beiträge
 
#8

Re: Query als Basis für einen Query?

  Alt 9. Okt 2006, 16:48
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!

Gruß
Matthias.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz