AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Query liefert falsche Werte zürück -Abfrage anhand vom Datum
Thema durchsuchen
Ansicht
Themen-Optionen

Query liefert falsche Werte zürück -Abfrage anhand vom Datum

Ein Thema von mewlos26 · begonnen am 11. Apr 2006 · letzter Beitrag vom 12. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
mewlos26

Registriert seit: 17. Okt 2005
13 Beiträge
 
Delphi 7 Professional
 
#1

Query liefert falsche Werte zürück -Abfrage anhand vom Datum

  Alt 11. Apr 2006, 00:26
Datenbank: Access • Version: 2003 • Zugriff über: ADO
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; /
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 11. Apr 2006, 06:31
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]';
Stephan B.
  Mit Zitat antworten Zitat
mewlos26

Registriert seit: 17. Okt 2005
13 Beiträge
 
Delphi 7 Professional
 
#3

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 11. Apr 2006, 14:41
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 11. Apr 2006, 15:05
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:
/* 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
Grüße vom marabu
  Mit Zitat antworten Zitat
mewlos26

Registriert seit: 17. Okt 2005
13 Beiträge
 
Delphi 7 Professional
 
#5

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 11. Apr 2006, 20:00
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.

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+
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 11. Apr 2006, 21:30
Zitat von mewlos26:
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.

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+
Ja, er wird wohl nicht wissen was "buchung.anreise" und "buchung.abreise" sein soll. Ich gehe davon aus, dass Du
Delphi-Quellcode:
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))'
gemeint hast. ?
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
mewlos26

Registriert seit: 17. Okt 2005
13 Beiträge
 
Delphi 7 Professional
 
#7

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 12. Apr 2006, 00:03
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 12. Apr 2006, 09:04
Guten Morgen.

Prüfe dein Statement mal ohne Parameter:

Delphi-Quellcode:
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;
Wenn das Ergebnis für Count() größer als 0 ist, dann versuche mal folgendes:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
mewlos26

Registriert seit: 17. Okt 2005
13 Beiträge
 
Delphi 7 Professional
 
#9

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 12. Apr 2006, 12:40
Hallo Marabu, das funktioniert leider nicht, es fehlen ja auch noch die anderen Parameter Hast Du sonst noch ein Idee?

Delphi-Quellcode:
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;
Grüße vom marabu[/quote]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Query liefert falsche Werte zürück -Abfrage anhand vom D

  Alt 12. Apr 2006, 13:49
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
  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 06:02 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