Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datumsübergabe funktioniert nicht einwandfrei (https://www.delphipraxis.net/56933-datumsuebergabe-funktioniert-nicht-einwandfrei.html)

mewlos26 13. Nov 2005 17:08

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Datumsübergabe funktioniert nicht einwandfrei
 
Hallo,

ich habe Probleme mit nachfolgender Abfrage:

Delphi-Quellcode:
 
 
  ADOQuery_Berichte.Close;
  ADOQuery_Berichte.SQL.Clear;
   with ADOQuery_Berichte do
    begin
      SQL.Text:=
  'SELECT buchung.anreise, buchung.abreise, Buchung.gid, adressen.gid,'+#13#10+ 
  'FROM (buchung LEFT JOIN adressen ON Buchung.gid=adressen.gid)'+#13#10+
  'WHERE (buchung.anreise >= :datevon1) AND (buchung.abreise <= :datebis1)'+#13#10+
  'ORDER BY buchung.anreise';
    with Parameters do
    begin
      ParamByName('datevon1').DataType := ftDate;
      ParamByName('datevon1').Value := Int(DateTimePicker21.Date);
      ParamByName('datebis1').DataType := ftDate;
      ParamByName('datebis1').Value := Int(DateTimePicker22.Date);
      ParamValues['objekt1']:=oid_zusatz;
      ParamValues['wohnung1']:=wid_zusatz;
    end;
      //ExecSQL;
      ADOQuery_Berichte.Open;
Wenn ich hier einen Zeitraum im DateTimePicker vom 01.01.2005 bis 31.12.2005 auswähle, liefert mir die Select Anweisung auch die Datensätze aus 2006 schon mit, was falsch ist. Ich verzweifele so langsam. Wer kann mir helfen? Die Datumsformatierung müsste doch so stimmen, oder?

DateTimePicker21 und 22 sind bei Format mit dd.mm.yyyy gesetzt.

RHerberg 13. Nov 2005 17:13

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Hi,

schau dir dies hier mal an:

Delphi-Quellcode:
 StrToDateTime(FormatDateTime('dd.mm.yyyy ', dtpende.Date) + FormatDateTime('hh:nn:ss', StrToTime(varendzeit)))

farmatdatetime ist Bestandteil der Unit "DateUtils". Da ist viel nützliches für Datum und Uhrzeit drin!

Gruß

alzaimar 13. Nov 2005 17:15

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Das wird Dein Problem vermutlich nicht lösen, aber ich hab immer Probleme mit reinen Datums- (ftDate) bzw. Zeitangaben (ftTime) gehabt. Ich verwende nur ftDateTime und setze den Zeitraum auf (z.B.) '1.1.2005 - 31.12.2005 23:59:59'.

Desweiteren solltest Du versuchen, mit "between" zu arbeiten, das ist i.A. schneller. Also "DateField between :Datum1 and :Datum2".

mewlos26 13. Nov 2005 18:07

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Kann mir mal jemand schreiben wie ich das komplett abändern soll, damit es richtig funktioniert?

marabu 13. Nov 2005 18:47

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Hallo.

Wenn dein Statement sich doch nicht ändert, dann solltest du es der SQL-Eigenschaft nicht jedesmal neu zuweisen. Wenn du dein Statement der Text-Eigenschaft zuweist, dann ist SQL.Clear überflüssig. Das Format deines DateTimePickers spielt bei deiner Vorgehensweise keine Rolle. Der BETWEEN Operator bringt dir nichts, wenn du Überdeckungsintervalle durchsuchst (hallo alzaimar). Die Klammerung deiner FROM-Klausel finde ich originell - gut, dass der SQL Parser Spaß versteht. Und außerdem hast du uns nicht das echte Statement gezeigt.

Delphi-Quellcode:
uses
  DateUtils;

const
  SEL
    = 'select b.gid, b.anreise, b.abreise from buchung b '
    + 'left join adressen a on b.gid = a.gid '
    + 'where b.anreise >= :dateFrom and b.abreise <= :dateTo '
    + 'order by b.anreise'
    ;

begin
  with ADOQuery_Berichte do
  begin
    Close;
    with Parameters do
    begin
      ParamValues['dateFrom'] := Trunc(DateTimePicker21.Date);
      ParamValues['dateTo'] := Trunc(DateTimePicker22.Date) + 1 - OneSecond;
      ...
    end;
    Open:
  end;
end;
Grüße vom marabu

alzaimar 13. Nov 2005 19:59

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Hi marabu! Man wird alt :nerd:...

Robert_G 13. Nov 2005 20:06

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Zitat:

Zitat von alzaimar
Hi marabu! Man wird alt :nerd:...

Doch nicht...
"a between b and c" ist das gleich wie "b <= a and a <= c"
Oder ich werde alt.... :gruebel:

alzaimar 13. Nov 2005 20:20

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Hier ist es aber a>=b and c<=d (a=Anreise, c=Abreise)

Oh man, das geht ja immer früher los, mit der Senilität :zwinker: ?
Beruhigend, das es vielleicht nur an der fortgeschrittenen Stunde liegt, oder dem Bier :cheers: ?

Robert_G 13. Nov 2005 20:50

Re: Datumsübergabe funktioniert nicht einwandfrei
 
Zitat:

Zitat von alzaimar
Hier ist es aber a>=b and c<=d (a=Anreise, c=Abreise)
Oh man, das geht ja immer früher los, mit der Senilität :zwinker: ?
Beruhigend, das es vielleicht nur an der fortgeschrittenen Stunde liegt, oder dem Bier :cheers: ?

Hih, kein Bier. Einfach nur allgemeine Zerstreutheit. ;) An der Zeit kann es jetzt am späten Nachmittaag nicht liegen. (Nicht auf die Sonne achten, die geht .. nach dem Mond :stupid: )
Schönen Sonntagabend noch und sorry für meinen neck-mounted OffTopic Bullshit generator... :duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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