![]() |
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Query liefert falsche Werte zürück -Abfrage anhand vom Datum
Hallo,
ich habe das Problem das mit nachfolgender Abfrage alle Datensätze angezeigt werden aus der Tabelle test, obwohl ich in der Variable wid_book_zusatz eine bestimmte Zahl zuweise. Wo stimmt die Abfrage hier nicht und wie kann ich mir die SELECT ANWEISUNG zur Laufzeit ausgeben lassen?
Delphi-Quellcode:
var oid_book_zusatz, wid_book_zusatz : string; ADOQuery_TEST.Close; ADOQuery_TEST.SQL.Clear; with ADOQuery_TEST do begin SQL.Text:= 'SELECT * FROM test'+#13#10+ 'WHERE (wid = :wohnung) '+#13#10+ 'AND (oid = :objekt) '+#13#10+ 'AND (:datevon1 BETWEEN anreise AND abreise) OR (:datebis1 BETWEEN anreise AND abreise)'; with Parameters do begin ParamValues['datevon1'] :=PlannerDatePicker15.Date; ParamValues['datebis1'] :=PlannerDatePicker16.Date; ParamValues['objekt'] :=oid_book_zusatz; ParamValues['wohnung'] :=wid_book_zusatz; end; ADOQuery_TEST.Open; end; / |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Hai mewlos26,
auf den ersten Blick würde ich sagen: Setzt um die beiden Datumsabfragen eine Klammer. Zur Zeit steht die letze Datumsabfrage alleine mit einem OR verknüpft in der WHERE-Klausel. Sobald also (:databis BETWEEN anreise and abreise) zutrifft trifft die gesamte Abfrage zu.
Code:
SQL.Text:= 'SELECT * FROM test'+#13#10+ 'WHERE (wid = :wohnung) '+#13#10+ 'AND (oid = :objekt) '+#13#10+ 'AND [color=red][b]([/b][/color](:datevon1 BETWEEN anreise AND abreise) OR (:datebis1 BETWEEN anreise AND abreise)[color=red][b])[/b][/color]'; |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Hallo Sharky,
das klappt schon mal super, danke. Die Select Abfrage liefert mir jetzt alle Datensätze die im Zeitraum 01.01.2006 bis 31.12.2006 liegen, aber wie muss die Select Abfrage komplett modifiziert werden, damit ich auch ne Buchung erhalte die z.B. vom 10.12.2006 bis 05.01.2007 geht, oder eine vom 15.12.2005 bis 04.01.2006? Die Schwierigkeit besteht jetzt darin, die letzte Buchung im Dezember zu finden die in den Januar geht und die Buchung die vom Dezember in den Januar geht. Hättest Du dafür auch eine Lösung? |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Hi.
Egal ob mit oder ohne Sharkys Klammern - deine Abfrage ist seltsam. Jeder Datensatz spezifiziert doch mit anreise und abreise ein geschlossenes Zeitintervall. Einige sinnvolle Abfragen aus mengentheoretischer Sicht wären dann - bei Angabe eines Suchintervalls:
SQL-Code:
Grüße vom marabu
/* Buchungsintervall im Suchintervall */
select ... where anreise >= :datumvon and abreise <= :datumbis /* Buchungsintervall beginnt im Suchintervall */ select ... where anreise between :datumvon and :datumbis /* Buchungsintervall endet im Suchintervall */ select ... where abreise between :datumvon and :datumbis |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Hallo,
das Problem ist hier das die Select Anweisung nur bis zum OR zwischen den beiden BETWEEN Abfragen ausgeführt wird. Die Abfrage hinter dem OR wird nicht berücksichtigt! Hat jemand eine Idee wie er beide Between Abfragen auch ausführt? Der Tip mit der runden Klammer am Anfang und am Ende war nicht die Lösung. Kann man das vielleicht nur mit einem verschachtelten Select bekommen die beiden Between Zeiträume Abfragen? Wenn ja wie müsste ich das umstricken? Irgendwas stimmt doch unten an der Syntax nicht. :roll: Gruß Markos
Delphi-Quellcode:
SQL.Text:=
'SELECT * FROM test'+#13#10+ 'WHERE (wid = :wohnung) '+#13#10+ 'AND (oid = :objekt) '+#13#10+ 'AND ((buchung.anreise BETWEEN :datevon1 AND :datebis1)'+#13#10+ 'OR (buchung.abreise BETWEEN :datevon1 AND :datebis1))'+#13#10+ |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Zitat:
Delphi-Quellcode:
gemeint hast. ?
SQL.Text:=
'SELECT * FROM test buchung' 'WHERE (buchung.wid = :wohnung) ' 'AND (buchung.oid = :objekt) ' 'AND ((buchung.anreise BETWEEN :datevon1 AND :datebis1)' 'OR (buchung.abreise BETWEEN :datevon1 AND :datebis1))' |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Hallo,
anbei mal die komplette Select Anweisung. Es muss an dem OR Liegen. Wo ist hier der Fehler? Muss ich die Abfrage vielleicht in 2 Select Anweisung verschachtelt aufbauen? Hat jemand eine Idee
Delphi-Quellcode:
SQL.Text:=
'SELECT buchung.oid, buchung.wid, buchung.anreise, buchung.abreise, buchung.GID, wohnungen.wid, wohnungen.wnr, wohnungen.wname, adressen.gid,'+#13#10+ 'objekte.oid, objekte.objname, objekte.objnr'+#13#10+ 'FROM buchung, adressen, wohnungen, objekte'+#13#10+ 'WHERE Buchung.gid = adressen.gid '+#13#10+ 'AND Buchung.wid = wohnungen.wid'+#13#10+ 'AND Buchung.oid = objekte.oid '+#13#10+ 'AND (buchung.wid = :wohnung1) AND (buchung.oid = :objekt1)'+#13#10+ 'AND ((buchung.anreise BETWEEN :datevon1 AND :datebis1)'+#13#10+ 'OR (buchung.abreise BETWEEN :datevon1 AND :datebis1))'+#13#10+ 'ORDER BY buchung.anreise, adressen.name'; with Parameters do begin ParamValues['datevon1'] :=PlannerDatePicker21.Date; ParamValues['datebis1'] :=PlannerDatePicker22.Date; ParamValues['objekt1'] :=oid_zusatz; ParamValues['wohnung1'] :=wid_zusatz; end; |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Guten Morgen.
Prüfe dein Statement mal ohne Parameter:
Delphi-Quellcode:
Wenn das Ergebnis für Count() größer als 0 ist, dann versuche mal folgendes:
begin
SQL.Text := 'SELECT COUNT(*) FROM buchung ' + 'WHERE (buchung.anreise BETWEEN #01/01/2006# AND #12/31/2006#) ' + 'OR (buchung.abreise BETWEEN #01/01/2006# AND #12/31/2006#) ' + 'ORDER BY buchung.anreise ' ; // ... end;
Delphi-Quellcode:
Grüße vom marabu
begin
SQL.Text := 'SELECT COUNT(*) FROM buchung ' + 'WHERE (buchung.anreise BETWEEN :datevon1 AND :datebis1) ' + 'OR (buchung.abreise BETWEEN :datevon2 AND :datebis2) ' + 'ORDER BY buchung.anreise ' ; with Parameters do begin ParamValues['datevon1'] := PlannerDatePicker21.Date; ParamValues['datebis1'] := PlannerDatePicker22.Date; ParamValues['datevon2'] := PlannerDatePicker21.Date; ParamValues['datebis2'] := PlannerDatePicker22.Date; end; // ... end; |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Hallo Marabu, das funktioniert leider nicht, es fehlen ja auch noch die anderen Parameter :( Hast Du sonst noch ein Idee?
Delphi-Quellcode:
Grüße vom marabu[/quote]
begin
SQL.Text := 'SELECT COUNT(*) FROM buchung ' + 'WHERE (buchung.anreise BETWEEN :datevon1 AND :datebis1) ' + 'OR (buchung.abreise BETWEEN :datevon2 AND :datebis2) ' + 'ORDER BY buchung.anreise ' ; with Parameters do begin ParamValues['datevon1'] := PlannerDatePicker21.Date; ParamValues['datebis1'] := PlannerDatePicker22.Date; ParamValues['datevon2'] := PlannerDatePicker21.Date; ParamValues['datebis2'] := PlannerDatePicker22.Date; end; // ... end; |
Re: Query liefert falsche Werte zürück -Abfrage anhand vom D
Mich würde interessieren wieviele Datensätze mit jeweils dem ersten und dem zweiten von mir angegebenen Test ermittelt wurden. Störe dich nicht daran, dass das SQL-Statement nicht ganz deinem entspricht.
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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