Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Locate mit Datumsfeld (https://www.delphipraxis.net/162885-locate-mit-datumsfeld.html)

Thomas Feichtner 8. Sep 2011 15:04

Datenbank: ADS • Version: 10 • Zugriff über: native

Locate mit Datumsfeld
 
Hallo,

ich habe einer Tabelle Feiertage.
Folgende Werte habe ich drinnen.

15.08.2011
01.11.2011
natürlich sind davor und danach auch noch werte daber für mein Problem nicht relevant.

Wenn ich nun ein Locate mache findet er nichts
Delphi-Quellcode:
  if dsFeiertag.Locate('paft_datum', SysUtils.Date, [loCaseInsensitive, loPartialKey]) then
      ShowMessage('Datum: ' + FormatDateTime('dd.mm.yyyy', dsFeiertage.FieldByName('part_datum').AsDateTime));
was kann ich machen, dass er sich in die nähe eines dieses Datums positioniert?

mkinzler 8. Sep 2011 15:17

AW: Locate mit Datumsfeld
 
Welchen Typ hat das Datenbankfeld?

Union 8. Sep 2011 16:10

AW: Locate mit Datumsfeld
 
Wenn Du nach dem Tagesdatum (sysutils.date) suchst wird er ja keinen Treffer finden können, da heute weder der 15.08. noch der 1.11. ist. Und womit sind die unterschiedlichen Felder paft_datum und part_datum gefüllt?

Thomas Feichtner 8. Sep 2011 16:10

AW: Locate mit Datumsfeld
 
Das Feld ist vom Typ Date und es ist ein ADT-Tabelle

Union 8. Sep 2011 16:15

AW: Locate mit Datumsfeld
 
Aber mit Locate wirst Du da nicht weiter kommen. Verwende lieber SQL. Und definier mal die Aufgabenstellung genauer. Z.b. "Herausfinden welche Feiertage in der Tabelle zwischen heute und nächster Woche liegen" oder so was.

Thomas Feichtner 9. Sep 2011 06:34

AW: Locate mit Datumsfeld
 
OK, dann muss ich einen Anderen Weg gehen.
Werde mir einen SQL basteln um auf den nächsten Datensatz zu kommen.

Ich dachte nur mit loPartialKey positioniert er sich in auf einen von beiden Datensätzen wenn er den gewünschten nicht findet.

Funktioniert dann die Option überhaupt mit Datumswerten bzw. Zahlen?

Union 9. Sep 2011 08:58

AW: Locate mit Datumsfeld
 
Das glaub ich nicht Tim^^

Hier mal ein SQL, das den nächsten Feiertag ab Tagesdatum holt:

Code:
select min(Feiertag) from Feiertage where Feiertag >= (select curdate() from system.iota)

himitsu 9. Sep 2011 09:27

AW: Locate mit Datumsfeld
 
Eine Abfrage über die "absoluten Differenzen" der Datumswerte (
Delphi-Quellcode:
abs(curdate() - part_datum)
), das sortiert nach aufsteigender Größe und davon dann den ersten Absatz, also den mit dem (kleinsten) Wert.

Das würde dann den nächstliegenden Feiertag bringen.



Oder alle zukünftigen Feiertage, wobei man hier die vergangenen ignoriert und sich aufsteigend ebenfalls den ersten Absatz rauszieht, welcher dann Heute oder als nächstes kommt.




Problem wird hierbei aber der Jahreswechsel sein, welche man mit berücksichtigen müßte.

jobo 9. Sep 2011 10:11

AW: Locate mit Datumsfeld
 
Wieso Abs()? Das würde doch auch vergangene Feiertage ins Spiel bringen oder?
Das Select aus Post 7 ist doch ok, vielleicht noch ein SORT by dazu.

DeddyH 9. Sep 2011 10:12

AW: Locate mit Datumsfeld
 
Wieso sortieren? Das SQL sollte doch nur einen Datensatz liefern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 1 von 2  1 2      

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