Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   datediff im grid (https://www.delphipraxis.net/185836-datediff-im-grid.html)

khh 10. Jul 2015 10:12

datediff im grid
 
hallo zusammen
Delphi-Quellcode:
datediff(minute,arbeitsbeginn,arbeitsende )as zeit
  from    arbeitszeiten
funktioniert.
Die Zeit wird mir als Minutenwert angezeigt.

Das Feld lässt sich aber nicht formatieren
Setze ich DisplayFormat von TColumn im DBGRid auf HH:mm mir im Feld "HH:mm" angezeigt


Was läuft da falsch ?

Muss ich das noch ins Datumsformat casten? wenn ja wie ?

Ich danke euch

rokli 10. Jul 2015 10:56

AW: datediff im grid
 
Hallo khh,

wenn Du es im (MS) SQL CASTEN willst, dann könntest Du das so machen:

CONVERT(CHAR(8), Datum, 114)

Hierbei heißt der CAST dann CONVERT 8-) , wobei der erste Parameter der Typ des Ergebnis ist, (CHAR(8), der 2. Parameter ist Dein DB-Feld, dass du umwandelt willst und der letzte Parameter drückt aus, dass es sich um eine Uhrzeit im Format hh:mm:ss:mmm im 24 Stunden Format ist.

Damit kann man auch Datums-Formate erzeugen, z. B. Parameter 104 ergibt tt.mm.jjjj bei einer Länge von CHAR(10). Der Rückgabewert ist dann allerdings ein String, und kein Datum- /Zeitwert mehr.


Gruß
Rolf

BadenPower 10. Jul 2015 11:10

AW: datediff im grid
 
Zitat:

Zitat von khh (Beitrag 1308295)
Das Feld lässt sich aber nicht formatieren
Setze ich DisplayFormat von TColumn im DBGRid auf HH:mm mir im Feld "HH:mm" angezeigt

Dann hast Du im Objektinspektor die Property "DisplayFormat" wahrscheinlich so gesetzt:
Code:
'HH:mm'
anstatt so:
Code:
HH:mm

khh 10. Jul 2015 11:35

AW: datediff im grid
 
convert kennt firebird wohl nicht
BadenPower, nein die Formatierung wurde nicht in '' übegeben :-(

mkinzler 10. Jul 2015 11:43

AW: datediff im grid
 
Zitat:

convert kennt firebird wohl nicht
Aber CAST()

khh 10. Jul 2015 11:48

AW: datediff im grid
 
@mkinzler

Code:
select cast(arbeitsende - arbeitsbeginn as time)
  from   arbeitszeiten
bringt mir :
overflow occurred during data type conversion
conversion error from string '0,333333'

mkinzler 10. Jul 2015 11:51

AW: datediff im grid
 
SQL-Code:
select
  cast(datediff(minute,arbeitsbeginn,arbeitsende) as char(8)) as zeit
from  
  arbeitszeiten;

khh 10. Jul 2015 12:05

AW: datediff im grid
 
jetzt hab ich die Zeit in Minuten, ich danke dir,

aber die Formatierung HH:mm im grid wird einfach ignoriert.

Kann ich das in der Query noch irgendwie in std und min umwandeln?

mkinzler 10. Jul 2015 12:28

AW: datediff im grid
 
Zitat:

Kann ich das in der Query noch irgendwie in std und min umwandeln?
Könnte man mit DIV und MOD des mit DATEDIFF erzeugtem Wertmachen; die Frage ist aber ob es sinnvoll ist. GGf. besser bei der Anzeige machen (notfalls im OnGetText der TField-Instanz)

BadenPower 10. Jul 2015 12:32

AW: datediff im grid
 
Zitat:

Zitat von khh (Beitrag 1308308)
aber die Formatierung HH:mm im grid wird einfach ignoriert.

Weil Dein Datentyp nicht ftDateTime,ftDate oder ftTime ist.

khh 10. Jul 2015 12:50

AW: datediff im grid
 
und wie krieg ich das jetzt am effektivsten hin?

mkinzler 10. Jul 2015 12:52

AW: datediff im grid
 
In der Abfrage oder bei der Anzeige?

khh 10. Jul 2015 13:09

AW: datediff im grid
 
ich denke am besten bei der abfrage, oder ists bei der Anzeige besser wenn man die Performence berücksichtigt ?

p80286 10. Jul 2015 13:36

AW: datediff im grid
 
Dann versuch es mal mit
SQL-Code:
 cast(datediff(minute,arbeitsbeginn,arbeitsende) as Time) as zeit
Gruß
K-H

khh 10. Jul 2015 13:41

AW: datediff im grid
 
Zitat:

Zitat von p80286 (Beitrag 1308322)
Dann versuch es mal mit
SQL-Code:
 cast(datediff(minute,arbeitsbeginn,arbeitsende) as Time) as zeit
Gruß
K-H

bringt mir eine overflow error from string

BadenPower 10. Jul 2015 14:20

AW: datediff im grid
 
Code:
SELECT TimeDiff(cast(arbeitsbeginn as Time),cast(arbeitsende as Time)) as zeit FROM arbeitszeiten

p80286 10. Jul 2015 14:28

AW: datediff im grid
 
Zitat:

Zitat von BadenPower (Beitrag 1308325)
Code:
SELECT TimeDiff(cast(arbeitsbeginn as Time),cast(arbeitsende as Time)) as zeit FROM arbeitszeiten

Ich hab angenommen das wäre schon Date/Time???


@khh
bevor noch ein paar untaugliche Vorschläge kommen, was für einen Typ hat
Delphi-Quellcode:
arbeitsbeginn
und
Delphi-Quellcode:
arbeitsende
?

Und wenn Du nicht die Anzahl von irgendwas sondern Stunden und Minuten ausgeben willst, dann übergib einen Date/Time Typen

Gruß
K-H

khh 10. Jul 2015 14:30

AW: datediff im grid
 
arbeitsbeginn und arbeitsende sind beide vom typ timestamp

und timediff kennt er leider nicht :-(

BadenPower 10. Jul 2015 15:47

AW: datediff im grid
 
Zitat:

Zitat von khh (Beitrag 1308327)
arbeitsbeginn und arbeitsende sind beide vom typ timestamp

Mit MySql würde dies ganz einfach gehen:

Code:
SELECT (SEC_TO_TIME(TIMESTAMPDIFF(SECOND,arbeitsbeginn,arbeitsende))) as Zeit FROM arbeitszeiten

khh 10. Jul 2015 15:59

AW: datediff im grid
 
Zitat:

Zitat von BadenPower (Beitrag 1308334)
Zitat:

Zitat von khh (Beitrag 1308327)
arbeitsbeginn und arbeitsende sind beide vom typ timestamp

Mit MySql würde dies ganz einfach gehen:

Code:
SELECT (SEC_TO_TIME(TIMESTAMPDIFF(SECOND,arbeitsbeginn,arbeitsende))) as Zeit FROM arbeitszeiten

ja, aber ich habe firebird.
Muss ich jetzt LEIDER sagen ? :-(

mkinzler 10. Jul 2015 16:11

AW: datediff im grid
 
SQL-Code:
select
  arbeitsende - arbeitsbeginn
from
  arbeitszeiten;

khh 10. Jul 2015 17:07

AW: datediff im grid
 
hallo markus,
so hab ich wieder den Dezimalwert vom Tag.
für 12 stunden also 0,5

DisplayFormat auf HH:mm zu setzen zeigt mir im Feld HH:mm an, funktioniert also nicht.

Wie bekomme ich das Anzeigefeld in std und min formatiert?

Das muss doch irgendwie gehen :-(

Olli73 10. Jul 2015 18:06

AW: datediff im grid
 
Also wenn du in/mit Sekunden rechnest, ist es ganz einfach. So ergibt z.B.:
Code:
select
  time '00:00:00' + 10000 as test
from
  ...
folgendes:
Code:
02:46:40
(Also 10000 Sekunden in dem Beispiel)

khh 10. Jul 2015 18:17

AW: datediff im grid
 
hallo olli
dann muss ich aber die Differenz der beiden timestampfelder in sekunden haben :-(

Olli73 10. Jul 2015 18:22

AW: datediff im grid
 
Zitat:

Zitat von khh (Beitrag 1308345)
hallo olli
dann muss ich aber die Differenz der beiden timestampfelder in sekunden haben :-(

Du hast doch Minuten?

Minuten * 60 => Sekunden :gruebel:

khh 10. Jul 2015 18:24

AW: datediff im grid
 
:oops:

khh 10. Jul 2015 18:32

AW: datediff im grid
 
Ihr seid die Besten :-)

Delphi-Quellcode:

time '00:00:00' + (datediff(minute,arbeitsbeginn,arbeitsende ))as zeit
  from    arbeitszeiten
funktioniert, mit einem kleinen Manko,
den führenden Taganteil müsste man noch ausblenden oder abschneiden können ;-)

der kann eh nie vorkommen

mkinzler 10. Jul 2015 18:38

AW: datediff im grid
 
Hat unter Lazarus TField auch den InGetText-Event?
Dann in dem

Delphi-Quellcode:
  Text := FormatDateTime( 'HH:MM', Sender.Value);

BadenPower 10. Jul 2015 20:52

AW: datediff im grid
 
Wenn Du in DateDiff als ersten Parameter statt "minute" "second" nimmst, dann bekommst Du die Sekunden.

Und die formatierte Ausgabe im Grid bekommst Du jetzt wieder mit der Property DisplayFormat = hh:mm:ss wenn auch die Sekunden erwünscht sind.

khh 11. Jul 2015 08:11

AW: datediff im grid
 
also mit datediff und second habe ich jetzt die sekunden in einem time-feld ( kein timestamp).

dieses lässt sich über displayformat HH:mm NICHT formatieren.
statt dessen steht wieder "HH:mm" im Feld :-(

mkinzler 11. Jul 2015 08:40

AW: datediff im grid
 
Ich verweise noch mal auf #28

khh 11. Jul 2015 08:51

AW: datediff im grid
 
Zitat:

Zitat von mkinzler (Beitrag 1308369)
Ich verweise noch mal auf #28

hallo markus,
InGetText gibt es unter Lazarus nicht

khh 11. Jul 2015 09:14

AW: datediff im grid
 
die formatierung per displayformat funktioniert ja mit einem Timestamp-feld.
dann sollte doch ein cast von time nach timestamp funtionieren, oder ?

wie bekomme ich den cast in der Query unter ?


select datediff(second,arbeitsbeginn,arbeitsende )as zeit
from arbeitszeiten

Olli73 11. Jul 2015 11:01

AW: datediff im grid
 
Darf der Rückgabewert auch ein String sein?

Code:
select
  substr(time '00:00:00' + datediff(second, arbeitsbeginn, arbeitsende), 1, 5) as zeit
from
  Arbeitszeiten

khh 11. Jul 2015 11:36

AW: datediff im grid
 
Zitat:

Zitat von Olli73 (Beitrag 1308376)
Darf der Rückgabewert auch ein String sein?

Code:
select
  substr(time '00:00:00' + datediff(second, arbeitsbeginn, arbeitsende), 1, 5) as zeit
from
  Arbeitszeiten


danke olli, aber substr kennt firebird leider nicht :-(

Olli73 11. Jul 2015 11:47

AW: datediff im grid
 
Zitat:

Zitat von khh (Beitrag 1308381)
danke olli, aber substr kennt firebird leider nicht :-(

Ist zumindest in der "ib_udf.dll" enthalten - und funktioniert bei mir.

khh 11. Jul 2015 12:25

AW: datediff im grid
 
ich habs jetzt so gelöst:

Delphi-Quellcode:

datediff(second,arbeitsbeginn,arbeitsende )/3600 as zeit
  from    hwd_arbeitszeiten
Allerdings bekomme ich so einen integer Wert.
Jemand ne Idee wie ich zu einem Dezimalwert komme, damit ich an die Minuten rankomme ?

Olli73 11. Jul 2015 12:31

AW: datediff im grid
 
Zitat:

Zitat von khh (Beitrag 1308386)
Allerdings bekomme ich so einen integer Wert.
Jemand ne Idee wie ich zu einem Dezimalwert komme, damit ich an die Minuten rankomme ?


Delphi-Quellcode:

datediff(second,arbeitsbeginn,arbeitsende )/3600.0000 as zeit
  from    hwd_arbeitszeiten

khh 11. Jul 2015 12:35

AW: datediff im grid
 
super, ich danke euch

jetzt noch den dezimalwert nach timestamp dann passts :-)

BadenPower 12. Jul 2015 12:48

AW: datediff im grid
 
Zitat:

Zitat von mkinzler (Beitrag 1308352)
Hat unter Lazarus TField auch den InGetText-Event?
Dann in dem
Delphi-Quellcode:
  Text := FormatDateTime( 'HH:MM', Sender.Value);

Zitat:

Zitat von khh (Beitrag 1308371)
Zitat:

Zitat von mkinzler (Beitrag 1308369)
Ich verweise noch mal auf #28

hallo markus,
InGetText gibt es unter Lazarus nicht

Klar dass es "InGetText" nicht gibt. Das gibt es unter Delphi auch nicht.

Das Event heisst "OnGetText" und steht TField auch bei Lazarus zur Verfügung.

Was mich allerdings wundert ist das DisplayFormat beim TE nicht funktioniert. Habe es nochmals geprüft und es funktioniert bei mir tadellos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Seite 1 von 2  1 2      

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