Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datumsbereich (https://www.delphipraxis.net/16322-datumsbereich.html)

X21Carsten 15. Feb 2004 12:14


Datumsbereich
 
Hallo,

ich möchte in einem SQL Befehl einen Datumsbereich festlegen. Leider hab ich wahrscheinlich nicht den richtigen Befehl. Es kommt immer ein Fehler. Vielleicht kann mir jemand von euch weiterhelfen.
zur Zeit benutze ich folgenden Befehl:

DSet_Wiedervorlage.CommandText:='SELECT * FROM Wiedervorlage WHERE (((Wiedervorlage.Datum) Between '''+datetostr(DTP_Wiedervorlagen_von.date)+''' And '''+datetostr(DTP_Wiedervorlagen_bis.date)+''')) ORDER BY Wiedervorlage.Datum

Vielen Dank!

mikhal 15. Feb 2004 12:20

Re: Datumsbereich
 
Das kommt auf die Datenbank an. In einer Oracle-Datenbank würde ich folgendes Konstrukt wählen:

Delphi-Quellcode:
DSet_Wiedervorlage.CommandText:='SELECT * FROM Wiedervorlage WHERE (TRUNC((Wiedervorlage.Datum) Between TO_DATE('+ QuotedStr(datetostr(DTP_Wiedervorlagen_von.date)) + ' And '+ QuotedStr(datetostr(DTP_Wiedervorlagen_bis.date)) + ')) ORDER BY Wiedervorlage.Datum'
Letztlich vergleichst du einen numerischen Wert. In deiner Konstruktion willst du aber einen numerischen (das Datumsfeld) mit zwei Strings vergleichen, und das geht so nicht.

Grüße
Mikhal

Albi 15. Feb 2004 12:25

Re: Datumsbereich
 
Hallo,

Ich habe das ganze so gelöst das ich gesagt habe gebe mir alles zwischen dem und dem Datum aus.

Code:
Select * From "'DB'" Where Datum < Datum and Datum >Datum+1
Das +1 war war bei mir notwendig, da er ansonsten den letzten Tag übergangen hat.

X21Carsten 15. Feb 2004 12:26

Re: Datumsbereich
 
ich habe ein access datenbank

X21Carsten 15. Feb 2004 12:42

Re: Datumsbereich
 
und in der access datenbank sind die felder typ datum

mikhal 15. Feb 2004 12:44

Re: Datumsbereich
 
Hast du auch Access? Wenn ja, warum baust du dir dann nicht einfach mal eine View gemäß deinen Forderungenund liest anschließend den SQL-Text aus?

Access erwartet das Datum in folgendem Format: #mm/dd/yyyy#

Besser als mit einer eigenen Zuweisung funktioniert es wohl so:

1. du weist einer TAdoQuery (oder auch TAdoDataSet, benutze ich selten) folgendes Statement in der Property SQL zu:
'SELECT * FROM Widervorlage WHERE [Datum] BETWEEN :P_ANFANG AND :P_ENDE'

2. Die beiden Parameter P_ANFANG und P_ENDE Haben folgende Eigenschaften:
+ DataType: ftDateTime und Type
+ Value.Type: Date

3. In deinem Quelltext weist du die benötigten Daten zu:
[/delphi]Query1.Parameters[0].Value = DTP_Wiedervorlagen_von.date;
Query1.Parameters[1].Value := DTP_Wiedervorlagen_Bis.date

4. Mit der Methode Open öffnest du die Query, falls sie noch geschlossen ist oder verwendest die Methode Requery, falls die Query bereits geöffnet ist.

Grüße
Mikhal

Robert_G 15. Feb 2004 15:01

Re: Datumsbereich
 
Ich glaube so etwas wie Views wirst du in einer Pseudo-DB wie Access nicht finden!

"Open" kannst du IMHO immer nutzen (solange es ein SELECT-Statement ist).
Wenn du das ganze so schreibst, weißt du auch in 2 Wochen noch was du hier machen wolltest (Nichts ist unübersichtlicher als unformatierte SQL-Statements):
Delphi-Quellcode:
With Query Do
  SQL.Text :=
    'SELECT *' + #10 +
    'FROM  Wiedervorlage' + #10 +
    'WHERE Datum BETWEEN :P_ANFANG AND :P_ENDE';
  Prepared := True;
  Params.ParamByName('P_ANFANG').Value := DTP_Wiedervorlagen_von.Date;
  Params.ParamByName('P_ENDE').Value  := DTP_Wiedervorlagen_bis.Date;
  Open;
  While not Eof Do
  Begin
    ...
    Next;
  End;
  ...
End;

mikhal 15. Feb 2004 18:45

Re: Datumsbereich
 
Zitat:

Ich glaube so etwas wie Views wirst du in einer Pseudo-DB wie Access nicht finden!
Stimmt, da heißen sie Abfragen.

Über die Formatierung kann man im Delphi Source streiten, wenn ich auch zugebe, daß ich eine entsprechende Formatierung selbst vorziehe.

Grüße
Mikhal

X21Carsten 16. Feb 2004 08:12

Re: Datumsbereich
 
Vielen Dank, das hat funktioniert.

Gruß Carsten


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