AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage funktioniert nicht

Ein Thema von FBrust · begonnen am 19. Sep 2003 · letzter Beitrag vom 20. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL-Abfrage funktioniert nicht

  Alt 19. Sep 2003, 13:38
Hallo,

ich habe (via Access 2000) die folgende SQL-Abfrage erstellt:

Code:
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;
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.

Weiss jemand warum?

BTW: Kennt jemand ein Tool, mit dem man SQL-Abfragen erstellen kann, die auch Delphi-konform sind?

Grüße
Frank
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: SQL-Abfrage funktioniert nicht

  Alt 19. Sep 2003, 16:12
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.
  Mit Zitat antworten Zitat
Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#3

Re: SQL-Abfrage funktioniert nicht

  Alt 19. Sep 2003, 16:40
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.

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.

Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SQL-Abfrage funktioniert nicht

  Alt 19. Sep 2003, 17:10
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
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#5

Re: SQL-Abfrage funktioniert nicht

  Alt 20. Sep 2003, 12:53
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?
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: SQL-Abfrage funktioniert nicht

  Alt 20. Sep 2003, 12:57
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
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#7

Re: SQL-Abfrage funktioniert nicht

  Alt 20. Sep 2003, 13:08
Zitat von FBrust:
die Zieldatenbank war die BDE.
BDE ist keine Datenbank sondern nur eine Zugriffschicht. Ich Du mußt noch irgendeine Datenbank dahinter stehen haben (Paradox, dBase, ORACLE, Informix, ...). Ach noch ein Hinweis, bei den Enterprise-Versionen von Delphi kannst Du den SQL-Builder der TQuery nutzen! Ob der auch bei allen Prof-Versionen bei ist, weiß ich nicht. Bei D7 Prof habe ich ihn gerade nachinstalliert!
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: SQL-Abfrage funktioniert nicht

  Alt 20. Sep 2003, 16:22
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
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#9

Re: SQL-Abfrage funktioniert nicht

  Alt 20. Sep 2003, 16:29
Zitat von FBrust:
Ist der SQLBuilder denn bei D7 Prof dabei?
Ja, muß allerdings von der CD nachinstalliert werden (erfolgt automatisch bei erstem Nutzungsversuch). Ist auch kein selbständiges Programm sondern ist integriert in TQuery (recht Maustaste und dann im Popup-Menü auswählen).
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#10

Re: SQL-Abfrage funktioniert nicht

  Alt 20. Sep 2003, 16:48
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:
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 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.

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
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:21 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