AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zeit/Datumsabfrage mit ClientDataSet
Thema durchsuchen
Ansicht
Themen-Optionen

Zeit/Datumsabfrage mit ClientDataSet

Ein Thema von zeras · begonnen am 26. Apr 2009 · letzter Beitrag vom 1. Mai 2009
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.629 Beiträge
 
Delphi 12 Athens
 
#1

Zeit/Datumsabfrage mit ClientDataSet

  Alt 26. Apr 2009, 17:58
Datenbank: MIDAS • Zugriff über: MIDAS.DLL
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));
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Zeit/Datumsabfrage mit ClientDataSet

  Alt 27. Apr 2009, 06:58
Hallo,

die Formatierung des DateTimes ist nicht korrekt. Soweit ich weiß unterstützt der SQL Syntax die Ticks nicht.
So würde es funktionieren:
FormatDateTime('yyyy-mm-dd hh:nn:ss',now) Gruß
Marco
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.013 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Zeit/Datumsabfrage mit ClientDataSet

  Alt 27. Apr 2009, 07:37
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:
CDS.Filter:=CDS.Filter + ' and ['+CDS.FieldDefs[IdxLetzterSchreibzugriff-1].Name+'] <> ' +
  QuotedStr(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', ActTime));
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Zeit/Datumsabfrage mit ClientDataSet

  Alt 27. Apr 2009, 18:49
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;
Andreas
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.629 Beiträge
 
Delphi 12 Athens
 
#5

Re: Zeit/Datumsabfrage mit ClientDataSet

  Alt 27. Apr 2009, 20:40
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.
Matthias
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.629 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zeit/Datumsabfrage mit ClientDataSet

  Alt 1. Mai 2009, 11:23
Zitat von Stevie:
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:
CDS.Filter:=CDS.Filter + ' and ['+CDS.FieldDefs[IdxLetzterSchreibzugriff-1].Name+'] <> ' +
  QuotedStr(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', ActTime));
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.
Habe ich gerade ausprobiert. Es kommt eine Fehlermeldung EVariantType Cast Error mit Meldung Variante des Typs (OleStr) konnte nicht in Type (Date) konvertiert werden.

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.
Matthias
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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