![]() |
Datenbank: MIDAS • Zugriff über: MIDAS.DLL
Zeit/Datumsabfrage mit ClientDataSet
Ich habe ein Clientdataset und möchte einen Datums/Zeiteintrag ausschliessen. Leider komme ich mit der Syntax nicht hin.
Hat jemand eine Idee?
Delphi-Quellcode:
//und auch neuen Datensatz ausschliessen
CDS.Filter:=CDS.Filter + ' and ['+CDS.FieldDefs[IdxLetzterSchreibzugriff-1].Name+'] <> ' + QuotedStr(FormatDateTime('yyyy-mm-dd"T"hh:nn:ss.zzz',ActTime)); //so geht es aber auch nicht CDS.Filter:=CDS.Filter + ' and ['+CDS.FieldDefs[IdxLetzterSchreibzugriff-1].Name+'] <> ' + QuotedStr(FormatDateTime('dd.mm.yyyy hh:nn:ss',ActTime)); |
Re: Zeit/Datumsabfrage mit ClientDataSet
Hallo,
die Formatierung des DateTimes ist nicht korrekt. Soweit ich weiß unterstützt der SQL Syntax die Ticks nicht. So würde es funktionieren:
Delphi-Quellcode:
Gruß
FormatDateTime('yyyy-mm-dd hh:nn:ss',now)
Marco |
Re: Zeit/Datumsabfrage mit ClientDataSet
So funktioniert es zumindest bei mir, du musst aber daran denken, dass jemand, der dein Programm nutzt auf seinem Rechner eine andere Datumsformatierung eingestellt haben kann, dann kannst du es nicht hardcoded in den Filter schreiben.
Delphi-Quellcode:
Du musst auch darauf achten, dass du hier Millisekunden genau überprüfst und schon die geringste Abweichung den Datensatz nicht mehr filtert. Wenn du das nicht willst musst du den Filter anders definieren.
CDS.Filter:=CDS.Filter + ' and ['+CDS.FieldDefs[IdxLetzterSchreibzugriff-1].Name+'] <> ' +
QuotedStr(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', ActTime)); |
Re: Zeit/Datumsabfrage mit ClientDataSet
Mit dem Event OnFilterRecord lässt sich das Problem wesentlich einfacher lösen.
Beispiel:
Delphi-Quellcode:
procedure TForm1.CSDatasetFilterRecord(DataSet: TDataSet; var Accept: Boolean);
const EINSTUNDE = 1.0/24.0; begin Accept := DataSet.FieldByName('LastChange').AsDateTime < (Now - EINESTUNDE); end; |
Re: Zeit/Datumsabfrage mit ClientDataSet
Danke für die Tipps. Werde das mal am Wochenende probieren. Es muss bis auf die 1/100 sek geprüft werden. Nur so kann ich rausfinden, dass der neue Datensatz nicht gleich wieder gelöscht wird. Wahrscheinlich müßte ich besser an der Struktur der DB was ändern, da diese aber schon beim Kunden läuft, ist es schlecht was zu ändern, was nicht schon in der DB enthalten ist.
|
Re: Zeit/Datumsabfrage mit ClientDataSet
Zitat:
Wenn ich ohne Millisekunden abfrage, kommt zwar keine Fehlermeldung, aber der gewisse Eintrag wird auch nicht ausgefiltert. Ich werde nun mal die Lösung von shmia ausprobieren. Vielleicht sollte ich später doch auf eine DB wie Firebird gehen, da kann ich bestimmt besser filtern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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-2025 by Thomas Breitkreuz