Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht (https://www.delphipraxis.net/163287-sql-abfrage-funktioniert-im-data-architect-query-von-delphi-nicht.html)

Metallicwar 23. Sep 2011 11:29

Datenbank: ADS • Version: 10.10 • Zugriff über: Delphi 2009

SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Hallo zusamme,
habe mir einen SQL im Data-Architect zusammengebaut und getestet.
Er wird erfolgreich ausgeführt und zeigt mir meine gewünschten Datensätze an.
Füge ich diesen SQL nun auch in meiner ADSQuery in Delphi ein, funktioniert er nicht mehr.

Code:
SELECT
    Buchungsdatei.Datum,
   Personal.ID, Personal.Name,
   Personal.Vorname,
    F.MinToHour(B_Ergebnisse.Pause) as Pause,
   F.MinToHour(B_Ergebnisse.Mehrarbeit) as Mehrarbeit,
   F.MinToHour(B_Ergebnisse.Tagesnetto) as Tagesnetto,
    min(Buchungen.Me1), max(Buchungen.Me2),
   sum(CASE WHEN Buchungen.AuftragNr IS NULL THEN 0 ELSE BSumme END) BSumme
FROM
    (((((Personal Personal LEFT OUTER JOIN Abteilungen Abteilungen ON
        Personal.ID_Abteilungen = Abteilungen.ID)
     LEFT OUTER JOIN Buchungsdatei Buchungsdatei ON
        Personal.ID = Buchungsdatei.ID_Personal)
     LEFT OUTER JOIN Buchungen Buchungen ON
        Buchungsdatei.ID_Personal = Buchungen.ID_Personal AND
    Buchungsdatei.Datum = Buchungen.Datum)
     LEFT OUTER JOIN FEHLTAGEDEFINITION FEHLTAGEDEFINITION ON
        Buchungsdatei.Fehltag = FEHLTAGEDEFINITION.Kuerzel)
     LEFT OUTER JOIN B_Ergebnisse B_Ergebnisse ON
        Buchungsdatei.ID = B_Ergebnisse.ID_Buchungsdatei)
Where Buchungsdatei.Datum >= '01.08.2011' and Buchungsdatei.Datum <= '30.08.2011' and Personal.ID = 88
group by Buchungsdatei.Datum, Personal.ID, Personal.Name, Personal.Vorname, Pause, Mehrarbeit,
         Tagesnetto
Folgenden Fehler erhalte ich, nur kann ich nicht verstehen wieso? Im Data Architect läuft die Abfrage ja schließlich auch ohne Probleme.
ERROR IN SCRIPT: poQuery: Error 7200: AQE Error: State = S0000; NativeError = 2124; [iAnywhere Solutions][Advantage SQL Engine]Invalid operand for operator: >=
[Invalid DATE] -- Location of error in the SQL statement is: 988 (line: 22 column: 21)

Union 23. Sep 2011 11:35

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Ich hatte das schon in dem anderen Thread geschrieben: Die Datumsliterale anpassen.
Code:
Where Buchungsdatei.Datum >= '2011-08-01' and Buchungsdatei.Datum <= '2011-08-30' and Personal.ID = 88
Ich seh da auch noch den 30. August kritisch, dieser Monat hat 31 Tage oder ist das Absicht? Und optimierter ginge es dann
Code:
Where Buchungsdatei.Datum between '2011-08-01' and '2011-08-30'
 and Personal.ID = 88

jaevencooler 23. Sep 2011 11:37

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Moin , Moin,


das Problem scheint Deine Where Bedingung zu sein.....
versuche es mal mit einem between und stelle sicher das die Datumsformat passen.

Gruß
Michael

: Ups Union war schneller.....

Jumpy 23. Sep 2011 11:38

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Da das SQL-Statement der Query ja wahrsch. als String übergeben wird. Wie stehts um die Maskierung der Hochkommata?

Union 23. Sep 2011 11:42

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Alternativ, wenn Du weiter mit landesspezifischen Datumsstrings arbeiten willst: TAdsSettings.DateFormat entsprechend setzen, so wie Du es ja wahrscheinlich auch im ARC unter den Optionen getan hast (oder sich ARC aus TFormatSettings geholt).

Kann ich aber nicht empfehlen - Du kriegst damit Deine Programme schwer über die Grenze ;)

Metallicwar 23. Sep 2011 11:54

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
BINGO, das wars!!
Zitat:

Where Buchungsdatei.Datum >= '2011-08-01' and Buchungsdatei.Datum <= '2011-08-30' and Personal.ID = 88
so funktionierts.
Hab dann die TAdsSettings Komponente auf die Form gezogen und mit dem gewünschten Datumsformat weitergearbeitet.
Besten Dank ...
MfG David
und Ein schönes Wochenende !

Bernhard Geyer 23. Sep 2011 12:07

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Und wieder mal ein Beispiel wo man durch Verwendung von parametrisierten Abfragen dieses Problem gar nicht gehabt hätte ...

Union 23. Sep 2011 12:09

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Code:
Datum := '01.01.01;Drop table Buchungensdatei;'
Ja, das macht immer wieder Freude...

p80286 23. Sep 2011 12:52

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Zitat:

Zitat von Union (Beitrag 1126187)
Code:
Datum := '01.01.01;Drop table Buchungensdatei;'
Ja, das macht immer wieder Freude...

Du hast es doch gelesen, erst das "richtige" Format ausprobiert und dann die Nationalisierungskrücke hinterher schieben.

Das to_date in oracle nervt mich zwar immer wieder, aber da werde ich immer wieder darauf gestoßen wieviele Möglichkeiten ich hätte wenn ich nur wollte.

Gruß
K-H

Metallicwar 23. Sep 2011 14:38

AW: SQL Abfrage funktioniert im Data Architect, in Query von Delphi nicht
 
Muss nochmal etwas nachfragen, komme einfach nicht auf die Lösung.

Code:
SELECT
    Buchungsdatei.Datum,
   Personal.ID, Personal.Name,
   Personal.Vorname,
        F.MinToHour(B_Ergebnisse.Pause) as Pause,
   F.MinToHour(B_Ergebnisse.Mehrarbeit) as Mehrarbeit,
   F.MinToHour(B_Ergebnisse.Tagesnetto) as Tagesnetto,
        min(Buchungen.Me1), max(Buchungen.Me2),
   sum(CASE WHEN Buchungen.AuftragNr IS NULL THEN 0 ELSE BSumme END) BSumme,
   Auftraggeber.Name // --> Name des Auftraggebers
FROM
    (((((((Personal Personal
LEFT OUTER JOIN Abteilungen Abteilungen ON
        Personal.ID_Abteilungen = Abteilungen.ID)
LEFT OUTER JOIN Buchungsdatei Buchungsdatei ON
        Personal.ID = Buchungsdatei.ID_Personal)
LEFT OUTER JOIN Buchungen Buchungen ON Buchungsdatei.ID_Personal = Buchungen.ID_Personal
AND Buchungsdatei.Datum = Buchungen.Datum)
Left outer join auftrag a on Buchungen.Id_Auftrag = a.id) // --> meine zwei joins, mit denen ich mir den Namen des Auftraggebers ermittel
Left Outer join Auftraggeber Auftraggeber on a.ID_Auftraggeber = Auftraggeber.Id) // -->2ter join
LEFT OUTER JOIN FEHLTAGEDEFINITION FEHLTAGEDEFINITION ON Buchungsdatei.Fehltag = FEHLTAGEDEFINITION.Kuerzel)
Left OUTER JOIN B_Ergebnisse B_Ergebnisse ON Buchungsdatei.ID = B_Ergebnisse.ID_Buchungsdatei)
Where Buchungsdatei.Datum >= '01.08.2011' and Buchungsdatei.Datum <= '30.08.2011' and Personal.ID = 88
and Auftraggeber.Name = 'Test GmbH'
group by Buchungsdatei.Datum, Personal.ID, Personal.Name, Personal.Vorname, Pause, Mehrarbeit,
         Tagesnetto,Auftraggeber.Name // -->gruppieren nach Auftraggeber
Mit diesem SQL zeigt er mir aber wieder nur die Tage im Monat an, für die ein Auftraggeber hinterlegt worden ist. Der SQL soll mir aber alle Tage anzeigen. An Tagen wo kein Auftraggeber hinterlegt ist, soll das Feld eben freigelassen werden.

Bevor ich diese 2 joins eingefügt habe, zeigte er mir noch für alle Tage werte an, nicht nur für Tage an denen auch gearbeitet worden ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Seite 1 von 2  1 2      

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