AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL mit Union und Unterabfragen liefert falsches Ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

SQL mit Union und Unterabfragen liefert falsches Ergebnis

Ein Thema von nachtstreuner60 · begonnen am 26. Jan 2007 · letzter Beitrag vom 29. Jan 2007
 
nachtstreuner60

Registriert seit: 15. Jan 2007
Ort: Eisenach
54 Beiträge
 
Delphi 7 Professional
 
#1

SQL mit Union und Unterabfragen liefert falsches Ergebnis

  Alt 26. Jan 2007, 23:59
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos SQL Query
Hallo SQL-Experten,

benötige mal wieder Tips zu folgender Abfrage:

Delphi-Quellcode:
// ist vonDatumbisZeit gefüllt, und bisDatum unterschiedlich zu von Datum
// und bisDatbisZeit gefüllt, dann
//*********** Zeitraum über mehrere Tage hinweg *******************************
if (length(trim(edvonDatvonZeit.Text)) = 8) and
   (length(trim(edVonDatbisZeit.Text)) <> 8) then begin
  if (length(trim(edbisDatbisZeit.Text)) = 8) and
     (length(trim(edBisDatvonZeit.Text)) <> 8) then begin

    datSQL := ' union select * from BESTELL where (DATUM = '+
              Quotedstr(DateToStr(vonDatum.Date)) + ' and ZEIT >= '+
              Quotedstr(edVonDatvonZeit.Text)+') union '+
              'Select * from BESTELL where (DATUM between '+
              Quotedstr(DateToStr(vonDATUM.Date + 1))+ ' and ' +
              QuotedStr(DateToStr(bisDatum.Date -1))+')'+
              ' union Select * from BESTELL where (DATUM = '+
              QuotedStr(DateToStr(bisDatum.Date))+' and ZEIT <= '+
              QuotedStr(edBisDatBisZEIT.text)+') order by 4, 5';

  end;
end;

// Zeige den SQL-BEFEHL

with dMODUL do begin
   zQueryKanban.SQL.Clear;
   zQueryKANBAN.SQL.Text := dSQL+datSQL;
   reditSQL.Clear;
   rEditSQL.Lines.Add(zQueryKANBAN.SQL.Text);
   showmessage(zqueryKANBAN.SQL.Text);
   zQueryKANBAN.Open;
end;
Folgender SQL-Befehl bekomme ich angezeigt:
SELECT * from BESTELL where STATUS = 'E' // dieser Befehl steht in dSQL
union
select * from BESTELL where (DATUM = '24.01.2007' and ZEIT >= '02:00:00')
union
Select * from BESTELL where (DATUM between '25.01.2007' and '24.01.2007') union
Select * from BESTELL where (DATUM = '25.01.2007' and ZEIT <= '14:00:00') order by 4, 5

Als Ergebnis bekomme ich tatsächlich ab 24.01.07 02:00:00 Uhr alle Datensätze, allerdings werden mir am 25.01.07 auch Datensätze angezeigt, die nach 14:00 Uhr liegen.
Der zweite Fehler ist folgender ,ich bekomme nicht nur STATUS ='E' angezeigt, sondern auch Status ='D'

Was ist hier schief gelaufen. Ich teste und lese schon fast 8 Std und komme zu keinem richtigen Ergebnis.

Wenn ich allerdings den SQL-Befehl vor dem ersten union weglasse,also Select * from Bestell where STATUS ='E', so erhalte ich die richtigen Datensätze für den abgefragten Zeitraum.

Ich bedanke mich jetzt schon, für alle Tips

Gruß Nachtstreuner
  Mit Zitat antworten Zitat
 


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 12:13 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