Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   extrahieren von Zeit aus TDatetime (https://www.delphipraxis.net/190016-extrahieren-von-zeit-aus-tdatetime.html)

robgoe 22. Aug 2016 07:08

Datenbank: Access • Version: 2013 • Zugriff über: dbGo

extrahieren von Zeit aus TDatetime
 
Hallo zusammen,
ich versuche schon seit geraumer Zeit über eine ADOQuery.Sql aus einem DateTimefeld einer Accesstabelle
nur anhand der Uhrzeit eine TDBGrid zu filtern.

Meine Feld "TStart" trägt den Inhalt

25.06.2016 08:05:00
25.06.2016 09:10:00
26.06.2016 07:58:00

Über eine ADOQuery versuche ich sowas wie:

ADOQuery.sql.text := select * from t_Arbeit where ZeitausFeld(TStart) <= 08:10

Jetzt sollten also nur 2 Datensätze angezeigt werden.

Ich habe schon Convert oder Cast probiert. Beides will mein System aber irgendwie nicht.

Mache ich es über Hour(TStart) oder Minute(TStart) kommt nicht das gewünschte Ergebnis.

Vielen Dank, wenn einer eine Lösung parat hat.


Windows 7; Delphi 10 Seattle; Access 2013;

jaenicke 22. Aug 2016 07:18

AW: extrahieren von Zeit aus TDatetime
 
Geht es vielleicht so?
Code:
select * from t_Arbeit where TimeValue(TStart) <= TimeValue('08:10')
// alternativ bekommst du den Uhrzeitanteil auch so:
TStart - Int(TStart)

Jasocul 22. Aug 2016 07:22

AW: extrahieren von Zeit aus TDatetime
 
Beim MS-SQL-Server funktioniert das so:
Code:
select *
  from t_Arbeit
 WHERE Convert(TIME, TStart) <= '08:10'

robgoe 22. Aug 2016 08:20

AW: extrahieren von Zeit aus TDatetime
 
Danke für die schnellen Antworten
aber,
bei:
ADOQuery1.SQL.Text := 'Select * from z_arbZeit where TimeValue(TStart) <= TimeValue(08:10:00)';

kommt Fehlermeldung: Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.
Wenn ich die Zeit in '' schreibe kommt Falscher Datentyp.

bei:
ADOQuery1.SQL.Text := 'Select * from z_arbZeit where Convert(Time,TStart) <= ''08:10:00''';
kommt Fehlermeldung: Undefinierte Funktion 'Convert' in Ausdruck.

:?::?::?:

Gruß
R.Götz

Jasocul 22. Aug 2016 09:08

AW: extrahieren von Zeit aus TDatetime
 
Probiere mal folgendes:
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'Select * from z_arbZeit where TimeValue(TStart) <= TimeValue(:Zeit)';
ADOQuery1.ParamByName('Zeit').AsString := '08:10:00';

robgoe 22. Aug 2016 09:20

AW: extrahieren von Zeit aus TDatetime
 
Das mag auch nicht.
Werde mal mit dem timeValue und den Parametern weiter probieren.

Gruß
R.Götz

p80286 22. Aug 2016 10:28

AW: extrahieren von Zeit aus TDatetime
 
Access ist ja ein wenig eigenwillig, was die SQL-Syntax angeht,
versuch es mal mit so etwas
SQL-Code:
where Datum>#1/1/2016#
Aus der Access-Hilfe:
Zitat:


Konvertiert Text in einen Datum/Uhrzeit-Wert, konvertiert aber nicht den Datumsteil.

TimeValue("11.01.2012 17:30")

Gruß
K-H

robgoe 22. Aug 2016 13:36

AW: extrahieren von Zeit aus TDatetime
 
Ich habe jetzt folgende Anweisung, welche zumindest ohne Fehler durchläuft.

ADOQuery1.SQL.Text := 'Select * from z_arbZeit where timeValue(:Zeit) = timeValue(:Zeit1)';

ADOQuery1.Parameters.ParamByName('Zeit').Value := DateTimeToStr(ADOQuery1.FieldByName('TStart').AsDa teTime);

-> Wenn ich FieldByName('TStart').ASString mache, kommt Fehlermeldung mit "Datentypen im Kriterienausdruck unverträglich".
Darum den Umweg über DateTimeToStr('....

ADOQuery1.Parameters.ParamByName('Zeit1').Value := '07:30:00';
ADOQuery1.Prepared := True;
ADOQuery1.active := True;

showmessage(IntToStr(ADOQuery1.RecordCount)) --> 0 Datensätze
Diese Uhrzeit gibt es aber.
was stimmt jetzt noch nicht.

Gruß

haentschman 22. Aug 2016 14:04

AW: extrahieren von Zeit aus TDatetime
 
Hallöle...:P
Zitat:

ADOQuery1.Parameters.ParamByName('Zeit1').Value := '07:30:00';
...vergiß nicht die Millisekunden. :P Bei Zeitvergleichen ist "=" im SQL schlecht. Besser "between" ...

p80286 22. Aug 2016 14:45

AW: extrahieren von Zeit aus TDatetime
 
Zitat:

Zitat von robgoe (Beitrag 1345400)
Ich habe jetzt folgende Anweisung, welche zumindest ohne Fehler durchläuft.
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'Select * from z_arbZeit where timeValue(:Zeit) = timeValue(:Zeit1)';

ADOQuery1.Parameters.ParamByName('Zeit').Value := DateTimeToStr(ADOQuery1.FieldByName('TStart').AsDateTime);
-> Wenn ich FieldByName('TStart').ASString mache, kommt Fehlermeldung mit "Datentypen im Kriterienausdruck unverträglich".
Darum den Umweg über DateTimeToStr('....

könnte es sein, das da etwas nicht stimmt?
a) Deine Abfrage liefert immer dann einen oder mehrere Werte zurück wenn die Parameter Zeit und Zeit1 den gleichen Inhalt haben. Unabhängig davon welche Daten in der DB vorhanden sind!
b) TimeValue erwartet als Parameter einen String, wenn Du versuchst ein DateTime-Format zu übergeben, wundern mich Fehlermeldungen nicht.

Gruß
K-H


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