Autor |
Beitrag |
flaavia
      
Beiträge: 105
WinXp Vista
D6 Ent, D2007 Ent
|
Verfasst: Fr 07.11.03 16:23
Hallo
Ich versuche in meiner Datenbank (Access über ADOQuery) nur bestimmte Datensätze auszufiltern, die z.B. älter sind, als ein bestimmes Datum ist. Es funktioniert mit:
Quelltext 1:
| select * from Tabelle where Datumspalte > 37680 |
wenn das Datum in TDateTime, also 37680 (als Beispiel) angegeben wird.
Da meine Datumsangaben in der Tabelle aber im "normalen" Format aufgeführt werden, würde ich gern ein "normales" Datum in der SQL-Anweisung angeben also z.B.
Quelltext 1:
| select * from Tabelle where Datumspalte > 28.02.2003 00:03:23 |
Geht das? bzw. wie muss man das in der SQL-Anweisung machen, damit die Datumsumwandlung funktioniert??
Für alle Tips bin ich sehr dankbar
Mit freundlichen Grüssen
Zuletzt bearbeitet von flaavia am Fr 07.11.03 21:28, insgesamt 1-mal bearbeitet
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 07.11.03 20:24
Versuch mal die Datumswerte in Anführungszeichen zu setzen, weiß aber nicht genau, ob das danna uch mit angehängter Zeit funktioniert. Evtl. musst Du sie aber auch dann etwas umformatieren
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 07.11.03 21:35
oder
select * from table where datum > convert(DATETIME,'<hier datum>',102)
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
flaavia 
      
Beiträge: 105
WinXp Vista
D6 Ent, D2007 Ent
|
Verfasst: Fr 07.11.03 21:48
Hallo
Leider geht es auch mit Anführungszeichen nicht, weder mit noch ohne angehängte Zeit.
Die Fehlermeldung lautet dann:
Datentypen in Kriterienausdruck unverträglich
Gibt es noch eine andere Lösung??
Ich könnte natürlich die DB umbauen und das Datum in einer weiteren Spalte im DateTime-Format mitführen, aber eigentlich sollte das doch auch irgendwie anders gehen - es werden doch auch sicherlich auch viele andere Programierer Datenbanken nach Zeiten ordnen wollen, so dass es da doch was geben müsste
|
|
flaavia 
      
Beiträge: 105
WinXp Vista
D6 Ent, D2007 Ent
|
Verfasst: Fr 07.11.03 22:01
Hallo Msch
Habe meine letzt Antwort geschrieben bevor ich Deinen Beitrag gesehen hatte
Ich verstehe Deinen Vorschlag leider nicht ganz.
Ich habe das Datum in der DB in folgendem Format stehen:
07.11.2003 20:45:00
und würde bei meinen SQL-Anweisungen ein Datum eingeben wollen (die Zeiten sind ehr unwichtig), ab dem die Daten ausgewählt werden. Zu diesem Datum weiss ich (oder der Benutzer) die entsprechende Zahl im TDateTime-Format nicht (kann man natürlich errechnen, ist aber ehr unanschaulich und mit zusätzlichem Aufwand verbunden, der eigentlich nicht zu dem Program passt)
kann ich dann nach deinem Vorschlag schreiben:
Quelltext 1:
| select * from table where datum > convert(DATETIME,'28.02.2003 00:03:23',102) |
aber was soll die 102 nach dem Komma?
ich habe es gerade ausprobiertund bekomme die Fehlermeldung:
Undefinierte Funktion 'convert' in Ausdruck
Was habe ich falsch gemacht?
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Sa 08.11.03 08:44
Hallo,
Access will das Datum in der Form MM/TT/JJJJ. Dies bedeutet, Du musst Deinen Datumsstring entsprechend umwandeln:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| function MakeAccessDatum(const aDate:TDateTime):String; var t, m, j:Word; begin DecodeDate(aDate, j, m, t); Result:=Format('%0.2d/%0.2d/%d', [m, t, j]); end; |
Aufrufen kannst Du es dann folgendermaßen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var sDat:String; ... ... sDat:=MakeAccessDatum(EncodeDate(2003, 11, 8)); ... MyQuery.Text:= Format('SELECT * FROM table WHERE datum>#%s#', [sDat]); ... |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
flaavia 
      
Beiträge: 105
WinXp Vista
D6 Ent, D2007 Ent
|
Verfasst: Sa 08.11.03 10:09
@ smiegel
Vielen Dank für den Tip
Wenn ich mir die Access DB direkt unter Access ansehe, dann sind dort die Datumsdaten allerdings in dem "normalen" Format
28.02.2003 00:03:23
aufgeführt. Da ich die in den ersten postings genannten Abfragen durchführen kann, wenn ich das Datum einfach im TDateTime, also als Zahl (Double) angebe,
Quelltext 1:
| select * from Tabelle where Datumspalte > 37680.459854 |
habe ich den Eindruck, dass das Datum intern auch in diesem Format abgespeichert wird, und dann je nach unter den Access-Formatierungseinstellungen eingestellt, dargestellt wird.
Ich habe Deinen Vorschlag, das Datum in diesem Format mm/tt/jjjj anzugeben, direkt im SQL-Text ausprobiert
Quelltext 1:
| select * from Tabelle where Datumspalte > 08/28/2003 |
- und es kommt keine Fehlermeldung mehr -
leider wird aber auch die Anweisung nicht ausgeführt, d.h. auch Datensätze mit älterem Datum, als dem im SQL-String angegebenen, mit dargestellt 
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Sa 08.11.03 14:14
Hallo,
wenn Du das Datum als Text übergeben willst, muss es zwischen 2 Rauten stehen (#11/08/2003#). Dies habe ich auch in meinem Posting so angegeben.
Definiere Dir einmal eine entsprechende Abfrage im Abfrageeditor von Access und schau Dir dann einmal den SQL-Code an...
Sicherlich kannst Du das Datum als TDateTime-Wert übergeben, da auch Access das Datum als seriellen Wert speichert. Aber ich würde mich nicht darauf verlassen, dass das Delphi- und das Accessdatum hunderprozentig kompatibel zueinander sind.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
flaavia 
      
Beiträge: 105
WinXp Vista
D6 Ent, D2007 Ent
|
Verfasst: Sa 08.11.03 15:14
Vielen herzlichen Dank
Das mit den Rauten hatte ich übersehen  . Jetzt geht es  , wenn wohl auch mit kleinen Rundungsfehlern (bei > #11/02/2003# wird z.B. ein Datensatz mit 02.11.2003 23:53:19 noch angezeigt, aber das ist nicht ganz so wichtig.
Jedenfalls vielen herzlichen Dank für die Unterstützung
PS: sind wohl doch keine Rundungsfehler, sondern wenn keine Zeit angegeben wird, wird diese wohl automatisch 00:00:00 gesetzt. Wie müsste ich denn die Zeit mit angeben?
#11/02/2003 23:53:19# 
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Sa 08.11.03 15:41
Hallo,
flaavia hat folgendes geschrieben: |
#11/02/2003 23:53:19#
|
genau so.
Das mit der Vermutung, dass ein Datum ohne Uhrzeitangabe immer 0 Uhr ist, stimmt auch.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
|