![]() |
SQL-Abfrage funktioniert nicht
Hallo,
ich habe (via Access 2000) die folgende SQL-Abfrage erstellt:
Code:
Diese Abfrage funktioniert in Access einwandfrei, aber wenn ich versuche, sie in D5 zu aktivieren, erhalte ich die Fehlermeldung "Ungültiger Parameter" ohne Hinweis auf Zeilennummer etc.
SELECT OP_MAIN.strRgMon, OP_MAIN.strWaste,
Count(OP_MAIN.strTrans) AS AnzTrans, OP_MAIN.strTrans, Sum(OP_MAIN.dblWeight) AS Gewicht, OP_MAIN.dblPrDisp, Sum(OP_MAIN.dblDispSum) AS Entsorgung, Sum(OP_MAIN.dblTransSum) AS Transport, Sum(OP_MAIN.dblSpecSum) AS Sonderposten, Sum(OP_MAIN.dblFeeSum) AS Gebühren, Sum(OP_MAIN.dblSurChargeSum) AS Zuschlag, SD_ADRESS.strName, SD_EN_VE.strVE3_1_2, SD_EN_VE.strVE3_1_4, SD_EN_AE.strAE1_1_1, SD_EN_AE.strAE1_3_2 FROM (OP_MAIN INNER JOIN (((SD_EN INNER JOIN SD_EN_AE ON SD_EN.ID = SD_EN_AE.ID_Link) INNER JOIN SD_EN_VE ON SD_EN.ID = SD_EN_VE.ID_Link) INNER JOIN SD_EN_PR ON SD_EN.ID = SD_EN_PR.ID_Link) ON OP_MAIN.intENID = SD_EN.ID) INNER JOIN SD_ADRESS ON OP_MAIN.strTrans = SD_ADRESS.strShortName GROUP BY OP_MAIN.strRgMon, OP_MAIN.strWaste, OP_MAIN.strTrans, OP_MAIN.dblPrDisp, SD_ADRESS.strName, SD_EN_VE.strVE3_1_2, SD_EN_VE.strVE3_1_4, SD_EN_AE.strAE1_1_1, SD_EN_AE.strAE1_3_2 ORDER BY OP_MAIN.strWaste; Weiss jemand warum? BTW: Kennt jemand ein Tool, mit dem man SQL-Abfragen erstellen kann, die auch Delphi-konform sind? Grüße Frank |
Re: SQL-Abfrage funktioniert nicht
Hallo Frank,
ist diese Abfrage auch für ACCESS gedacht? Bei Delphi gibt's den Datenbank-Desktop. Mit QBE kannst Du da auch Abfragen erzeugen und Dir anschließend den SQL-Befhl anschauen. ob aber so etwas geht? Diese vielen Inner-Joines. Typisch ACCESS. |
Re: SQL-Abfrage funktioniert nicht
FBrust hat ja geschrieben, dass die Abfrage in Access einwandrei geht. Über QBE kann man LocalSQL für die BDE generieren - die Feinheiten von Access oder anderen Systemen kann man so nicht ausnutzen.
Ich konnte jetzt keine Fehler entdecken, welche Delphi irrtümlicherweise dazu veranlassen würden, in dieser Query einen Parameter zu suchen. :roll: Sind in der Query-Komponente auch keine Parameter-Daten eingetragen? Wie wird die Abfrage zugewiesen? Einfach MeineQuery.SQL.Add ? Ich kann jedenfalls so nichts sehen, was nicht stimmen würde. Eine Zeilennummer wird übrigens in diesem Fall nie ausgegeben, da Access aus Abfragen bei Fehlern keine Zeilen zurückgibt im Gegensatz z.B. zu Oracle. :coder: |
Re: SQL-Abfrage funktioniert nicht
Hallo,
danke für Eure Antworten. In der Abfrage sind keine Parameterdaten eingetragen (Params) und die Abfrage stand als Text in der SQL-Eigenschaft. Also, die Abfrage war für Delphi gedacht. Das Entwickeln von SQL-Abfragen geht mit Access wesentlich einfacher als mit Delphi, aber ich werde wohl zukünfigt auch die QBE-Abfrage vom Database Desktop verwenden. Ich habe jetzt den halben Nachmittag damit verbracht, den Fehler nicht zu finden :) . Zum Schluß habe ich die Abfrage so umgebaut, dass sie funktioniert. Das Problem lag wohl bei den Inner Join-Anweisungen (vielleicht zuviele?). Interessanterweise lässt sich auch die vereinfachte Abfrage nicht mittels HAVING-Klausel weiter filtern. Das musste ich im Programm über das Setzen der Filter-Eigenschaft tun. Hauptsache, es funktioniert jetzt! Trotzdem: Danke für Eure Hilfe. Grüße Frank |
Re: SQL-Abfrage funktioniert nicht
Hallo,
@Alfons_G: Frank hat geschrieben, dass er die Abfrage mit ACCESS erstellt hat. Man kann so auch Abfragen auch auf Informix oder Oracle-DBs erstellen. Nur verwendet ACCESS eine "Special"-SQL, so das dies generierten SQL-Statements auf anderen DBs nicht funktionieren (Inner-Joins!). QBE erstellt zwar Abfragen für die LocalSQL. Da diese aber eine Teilmenge von SQL92 ist, sollten diese SQL-Statements auch für alle anderen DBs funktionieren. @Frank: Welches war nun eigentlich die Zieldatenbank? |
Re: SQL-Abfrage funktioniert nicht
Hallo Rainer,
die Zieldatenbank war die BDE. Aber, wie gesagt, ich werde in Zukunft die SQL-Statements mit dem Database-Desktop erzeugen, um mehr Kompatibilität zu erreichen, denn es waren gerade die Inner Joins, die hier die Probleme verursacht haben. Gruß Frank |
Re: SQL-Abfrage funktioniert nicht
Zitat:
|
Re: SQL-Abfrage funktioniert nicht
Hallo Rainer,
die Datenbank war/ist Paradox. Ist der SQLBuilder denn bei D7 Prof dabei? Ich arbeite momentan mit Delphi 5 Professional und "damals" war der Builder nur bei der Enterprise-Version dabei. Gruß Frank |
Re: SQL-Abfrage funktioniert nicht
Zitat:
|
Re: SQL-Abfrage funktioniert nicht
Hallo BFrust,
ich habe auch gerade ne Access-DB am Start (wobei ich jetzt nicht ganz weiß, ob sich dein Prob auf eine Access-DB oder eine Paradox-DB bezieht), bei der ich auch einige Probleme dieser Art hatte. In diesen beiden SQL-Beispielen, die denen ich mit Delphi über ADO eine Access-DB erfolgreich abfrage, hatte ich zuerst auch den gleichen Fehler. Unter Access funzt es, aber der gleiche Syntax in einem ADOQuery - Geht nicht. Nach dem ich dann etwas rumexperimentiert hatte, funktionierten diese beiden Abfragen.
SQL-Code:
Select
Artikel.ID as ArtID, Artikel.Artikelnr as ArtNr, Artikel.Artikelname as Name, Adressenliste.Name as Lieferant, Std_Art_Gruppen.Wert as Kategorie, Std_VPE.Wert as VPE, Artikel.Einzelpreis as preis, Artikel.Lagerbestand as bestand, Artikel.BestellteEinheiten as bestellt from ( ( Artikel Left JOIN Adressenliste ON Artikel.Adr_ID=Adressenliste.ID ) Left JOIN Std_VPE ON Artikel.VPE_ID=Std_VPE.ID ) Left JOIN Std_Art_Gruppen ON Artikel.Kat_ID=Std_Art_Gruppen.ID Order by Artikel.Artikelname
SQL-Code:
Ich hab jetzt zwar nicht wirklich einen grundlegenden Unterschied zu deiner Abfrage erkannt, aber vielleicht findest du ja den Unterschied oder den Anstoß, warum es nicht gleich funktioniert.
Select * from
( Select Kasse.ID as KID, Kasse.Belegdatum as KDatum, Kasse.Betrag as KBetrag, Kasse.Einnahme as KEinnahme, Std_Kasse_Konto.Kontoname as SKontoname, Std_Kasse_Konto.Kontonummer as SKontonummer, Kasse.Beschreibung as KBeschreibung from Kasse left join Std_Kasse_Konto ON Kasse.Konto_ID=Std_Kasse_Konto.ID ) Where Month(KDatum)=6 and Year(KDatum)=2003 Order by KDatum, KID Ich hätte ja jetzt deine Abfrage mal ausprobiert, aber ohne die Datenbank ist das bei der Komplexität schwer möglich. Wäre eine Herausforderung :mrgreen: |
Re: SQL-Abfrage funktioniert nicht
Hallo Captnemo,
ich habe später die obige Abfrage stark vereinfacht (der INNER JOIN von OP_MAIN auf SD_EN war unnötig), danach gings. Manchmal denkt man eben zuerst um 3 Ecken und dann geradeaus... :wall: Aber nachdem sich hier herausgestellt hat, dass das SQL von Access nicht unbedingt kompatibel zu dem von LocalSQL ist, werde ich wie gesagt, zukünftig darauf verzichten. Ausserdem steige ich demnächst auf D7 Prof. um und kann dann den SQLBuilder benutzen. Grüsse Frank |
Re: SQL-Abfrage funktioniert nicht
@Captnemo: Befehle wie Inner join, left join, ... gibt es nun mal nicht in jeder DB. Ich bin mir jetzt auch nicht ganz sicher, ob das überhaupt SQL-Standard ist. ACCESS ist sowieso ein wenig special. Ich denke da nur an das Wildcard-Zeichen in LIKE-Abfragen. Bei ACCESS ist das * in SQL %. Ein SQL-Statement, das LIKE enthält und mit ACCESS generiert wurde läuft somit mit keiner anderen SQL-Datenbank!
|
Re: SQL-Abfrage funktioniert nicht
Och, dieses Sonderverhalten trifft bei Access auch auf Datumswerte zu.
Aber die JOINS gehören glaube ich zum SQL-97-Standard, glaube ich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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 by Thomas Breitkreuz