Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Befehl Datum zwischen x und x funktioniert nicht richtig (https://www.delphipraxis.net/16857-sql-befehl-datum-zwischen-x-und-x-funktioniert-nicht-richtig.html)

X21Carsten 24. Feb 2004 18:12


SQL Befehl Datum zwischen x und x funktioniert nicht richtig
 
Hallo,

ich greife über Delphi mit einem ADODATASET auf eine Access Datenbank zu.

Leider funktioniert der Befehl nicht

Das Datum wird auf das in Access übliche Format angepasst:
Delphi-Quellcode:
Datum_von:='#'+datetostr(DTP_Wiedervorlagen_von.Date)+'#';
Datum_von:=stringreplace(Datum_Von,'.','/', [rfReplaceAll]);
Datum_bis:='#'+datetostr(DTP_Wiedervorlagen_bis.Date)+'#';
Datum_bis:=stringreplace(Datum_bis,'.','/', [rfReplaceAll]);

Befehl in Delphi:
Delphi-Quellcode:
DSet_Wiedervorlage.CommandText:='SELECT * FROM Wiedervorlage WHERE Datum Between '+Datum_von+' And '+Datum_bis+' and VBNummer='+inttostr(VBNummer)+' order by Datum';


Befehl zur Laufzeit:
Delphi-Quellcode:
SELECT * FROM Wiedervorlage WHERE Datum Between #03/02/2004# And #16/03/2004# and VBNummer=62826106 order by Datum

Nun zum Fehler wenn ich das Datum ändere das heist Datum z.B.: vom 20.02.2004 bis 16.03.2004
dann kommen drei Datensätze. Wenn ich aber Datum vom 03.02.2004 bis 16.03.2004 kommt kein Datensatz, obwohl eigentlich 3 stück kommen müssten.

Also nach meiner Ansicht vertauscht der Tag + Monat... Kann das an der DateTimePickler Datumskomponente liegen?

Woran kann das liegen???

Marcel Gascoyne 24. Feb 2004 22:56

Re: SQL Befehl Datum zwischen x und x funktioniert nicht ric
 
Warum so umständlich ? Wie wärs hiermit:

Delphi-Quellcode:
Datum_von := FormatDateTime('#yyyy/mm/dd#',DTP_Wiedervorlagen_von.Date);
Datum_bis := FormatDateTime('#yyyy/mm/dd#',DTP_Wiedervorlagen_bis.Date);
Gruß,
Marcel

DP-Maintenance 24. Feb 2004 23:12

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Sonstige Fragen zu Delphi" nach "Datenbanken" verschoben.
Das sieht mir sehr verdächtig nach einer Datenbank-Frage aus. Und ab damit. ;-)

Robert_G 24. Feb 2004 23:18

Re: SQL Befehl Datum zwischen x und x funktioniert nicht ric
 
Wie wäre es denn auf die einfache Art (und vor allem ohne implizierte Umwandlungen!)
Delphi-Quellcode:
  With ADOQuery Do
  Begin
    SQL.Text :=
      'SELECT *' + #10 +
      'FROM  Wiedervorlage' + #10 +
      'WHERE Datum BETWEEN :i_Datum_von AND :i_Datum_bis AND' + #10 +
      '      VBNummer = :i_VBNummer' + #10 +
      'ORDER BY Datum';
  // Parsing des Statements um Query Parameter zu finden...
    Prepared := True;
  // Werte an Query Parameter übergeben...
    Parameters.ParamByName('i_Datum_von').DataType := ftDateTime;
    Parameters.ParamByName('i_Datum_bis').DataType := ftDateTime;

    Parameters.ParamByName('i_VBNummer').Value := VBNummer;
    Parameters.ParamByName('i_Datum_von').Value := DTP_Wiedervorlagen_von.Date;
    Parameters.ParamByName('i_Datum_bis').Value := DTP_Wiedervorlagen_bis.Date;
    Open;
  End;

X21Carsten 25. Feb 2004 09:26

Re: SQL Befehl Datum zwischen x und x funktioniert nicht ric
 
danke für die tipps, ich probiere es gleich mal aus.
Ich bin nicht so der Delphi profi, lerne mir viele sachen selbst, deswegen siehts manchmal etwas umständlich aus :-)

Robert_G 25. Feb 2004 09:50

Re: SQL Befehl Datum zwischen x und x funktioniert nicht ric
 
Du willst gar nicht wissen, wie meine ersten Anwendungen vor ca. einem Jahr aussahen. :mrgreen:

Union 18. Mär 2004 07:15

Re: SQL Befehl Datum zwischen x und x funktioniert nicht ric
 
Hallo X21Carsten,

beim BETWEEN mit Datumswerten muss man aufpassen. Denn ein reiner Datumswert stellt immer den Tag um 0:00 dar. wenn Du DateTime Werte in der Datenbank hast, muss deshalb der Wert-Bis (nach dem AND) einen Tag grösser sein. In Deinem Beispiel müsstest Du dann abfragen bis zum 17.3.

bye


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