Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datenbank mehr als 24h (https://www.delphipraxis.net/117918-datenbank-mehr-als-24h.html)

API 28. Jul 2008 07:56


Datenbank mehr als 24h
 
Hallo

In Excel habe ich einige Daten, welche das Format [h]:mm aufweisen.
(Anz Std. : Anz. Minuten, keine Uhrzeit)

Nun sollen die Daten in eine Access DB übertragen werden.
Das Format [h]:mm kann aber nicht eingestellt werden, es wird immer in ein DateTime Format umgewandelt.

Zudem sollen diese Felder auch über ein Formular editierbar sein.
D.h eine Umwandlung in Sek. wäre evtl. nicht optimal, da im Formular auch [h]:mm angezeigt werden soll.

Hat jemand eine Lösung hierfür?

Bernhard Geyer 28. Jul 2008 07:58

Re: Datenbank mehr als 24h
 
Nimm einen Float-Wert und definiere

1 = 1 Tag (24 Stunden)
2 = 2 Tage (48 Stunden)
....

API 28. Jul 2008 08:05

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von Bernhard Geyer
Nimm einen Float-Wert und definiere

1 = 1 Tag (24 Stunden)
2 = 2 Tage (48 Stunden)
....

Danke für die Antwort; Verstehe sie jedoch nicht.
Warum soll ich Tage definieren, es sollen doch nur hh:mm angezeigt werden.
Un wo / wie sollte dies definiert werden?

hoika 28. Jul 2008 08:46

Re: Datenbank mehr als 24h
 
Hallo,

ich verstehe dein Problem nicht ganz.
Access ist eine Datenbank (huch, habe ich das gesagt ;) ).

Das Format DateTime ist doch richtig.
Es kann in einem Access-Form auch schön bearbeitet werden
(Form entweder vom Assistenten erzeugt oder DateTimePicker).


Heiko

API 28. Jul 2008 08:51

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von hoika
Das Format DateTime ist doch richtig.

Im DateTime Format wäre doch z.B 34:12 (34h, 12 min) "out of range", oder?

hoika 28. Jul 2008 09:00

Re: Datenbank mehr als 24h
 
Hallo,

kommt drauf an ...

intern wird DateTime als Sekunden (?) ab dem 30.12.1899 (oder der 31.) gespeichert.

DateTime ist ein Float, vor dem Komma stehen die Tage,
nach dem Komma die Stunden des Tages / 24, also ist 12:00 gleich 0.5 (halber Tag)

z.B 34:12 ist also 24 + 10 + 0:12 (=0.2 Stunden)
24 ist 1.0 als Tag, die Stunden sind dann 1.0 (die 24) + 10.2/24 = 1,425

Inwiefern du das mit einem DateTimePicker abbilden kannst, weiss ich jetzt nicht.

Zur Not muss ein normaler Editor her,
und du formst das selber um (so mache ich es in Delphi).


Heiko

API 28. Jul 2008 13:36

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von hoika
Hallo,

intern wird DateTime als Sekunden (?) ab dem 30.12.1899 (oder der 31.) gespeichert.

DateTime ist ein Float, vor dem Komma stehen die Tage,
nach dem Komma die Stunden des Tages / 24, also ist 12:00 gleich 0.5 (halber Tag)

z.B 34:12 ist also 24 + 10 + 0:12 (=0.2 Stunden)
24 ist 1.0 als Tag, die Stunden sind dann 1.0 (die 24) + 10.2/24 = 1,425

Inwiefern du das mit einem DateTimePicker abbilden kannst, weiss ich jetzt nicht.

Heiko

Das Problem ist aber, dass wenn das Feld auf Date / Time gesetzt wird, z.B 33:44 nicht angenommen wird.

mkinzler 28. Jul 2008 13:40

Re: Datenbank mehr als 24h
 
Der Typ nimmt auch Zeitpunkte und nich Zeitspannen auf

API 28. Jul 2008 13:44

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von mkinzler
Der Typ nimmt auch Zeitpunkte und nich Zeitspannen auf

Dessen bin ich mir ja bewusst, und darum habe ich die Frage gestellt

hoika 28. Jul 2008 13:44

Re: Datenbank mehr als 24h
 
Hallo,

ist das ein Access- oder Delphi-Programm ?

In Delphi kannst du ja TMaskEdit benutzen zur Eingabe.

Das Umformen (hin- und zurück) musst du aber selber machen.


Heiko

Bernhard Geyer 28. Jul 2008 13:45

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von API
Zitat:

Zitat von mkinzler
Der Typ nimmt auch Zeitpunkte und nich Zeitspannen auf

Dessen bin ich mir ja bewusst, und darum habe ich die Frage gestellt

Dann darfst du einfach nicht diesen Typ nehmen und kein Controls die mit Zeitpunkten arbeiten!

DeddyH 28. Jul 2008 13:51

Re: Datenbank mehr als 24h
 
Was spricht denn gegen ein Integerfeld, in dem die Minuten abgelegt werden? Das bisschen Rechenaufwand mit mod und div fällt ja nicht so sehr ins Gewicht.

API 28. Jul 2008 14:08

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von DeddyH
Was spricht denn gegen ein Integerfeld, in dem die Minuten abgelegt werden? Das bisschen Rechenaufwand mit mod und div fällt ja nicht so sehr ins Gewicht.

Es spricht eigentlich nichts dagegen. Nur wie kann das "DisplayFormat" in Stunden:Minuten angezeigt werden?
In Access gibt es ja keine DisplayFormat Eigenschaft wie in Delphi---

mkinzler 28. Jul 2008 14:10

Re: Datenbank mehr als 24h
 
Selber Rechnen: Zeit DIV 60 -> Stunden Zeit MOD 60 -> Minuten

API 28. Jul 2008 14:19

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von mkinzler
Selber Rechnen: Zeit DIV 60 -> Stunden Zeit MOD 60 -> Minuten

Das Rechnen ist kein Problem. Die Frage war ja

Zitat:

Nur wie kann das "DisplayFormat" in Stunden:Minuten angezeigt werden?

mkinzler 28. Jul 2008 14:25

Re: Datenbank mehr als 24h
 
Delphi-Quellcode:
s := Format('%2d:%2d', [Zeit DIV 60, Zeit MOD 60]);

DeddyH 28. Jul 2008 14:27

Re: Datenbank mehr als 24h
 
Oder halt eine VBA-Entsprechung in Access.

API 28. Jul 2008 14:51

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
s := Format('%2d:%2d', [Zeit DIV 60, Zeit MOD 60]);

Die Berechnung ist mir klar, vielleicht war die Frage nicht verständlich.

Ich suche eine Möglichkeit, das Format zu ändern, so wie es angezeigt wird.
Gespeichert wird ein Integer Wert, angezeigt werden soll ein Format Stunden:Minuten.

Kann das im AfterUpdate() gemacht werden und wie?

mkinzler 28. Jul 2008 14:53

Re: Datenbank mehr als 24h
 
Das Beispiel zeigt doch wie aus dem Integer ein String erzeugt wird, den kannst du dann anzeigen lassen ( Label, Edit, ...)

Jelly 28. Jul 2008 16:38

Re: Datenbank mehr als 24h
 
Du kannst auch noch auf dein TDataset aufbauen ein calculated Field anlegen (String), und dort die von mkinzler gegebene Umwandlung vornehmen. Anzeigen kannst du dann einfach dieses Calculated Field in deinen visuellen Datenkomponenten.

Aendern kannst du ein Calculated Field jedoch nicht.

alzaimar 28. Jul 2008 17:04

Re: Datenbank mehr als 24h
 
Wie wäre es mit den OnGetText/OnSetText-Ereignissen des Feldes? Schaut mal in der Delphi-OH, wie das geht (total simpel)

API 28. Jul 2008 18:01

Re: Datenbank mehr als 24h
 
Hallo, danke für die Antworten.

Diese gehen jedoch nicht auf meine Frage ein. Die Frage hat nichts mit Delphi zu tun. Nur mit M$ Access.

mkinzler 28. Jul 2008 18:04

Re: Datenbank mehr als 24h
 
Dann musst du das dort entsprechend machen

API 28. Jul 2008 18:40

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von mkinzler
Dann musst du das dort entsprechend machen

Wenn ich wüßte wie, dann hätte ich die Frage gar nicht gestellt..

mkinzler 28. Jul 2008 18:54

Re: Datenbank mehr als 24h
 
Versuch mal
SQL-Code:
select (zeit div 60) & ':' & (zeit mod 60) from <tabelle>;

marabu 28. Jul 2008 20:33

Re: Datenbank mehr als 24h
 
Hallo,

wenn ich das Problem richtig verstehe, dann geht es darum ein eigenes Ein-Ausgabe-Format für ein Access Formularfeld zu definieren. Dazu würde ich ein ungebundenes Textfeld mit Eingabemaske 9990:00 verwenden. Dann würde ich beim Ereignis BeforeUpdate des Feldes den String in das interne Zeitformat umrechnen. Die Rechenschritte dürften nicht das Problem sein, aber es muss noch das Ereignis identifiziert werden, bei dem der interne Wert in die Darstellungsform gewandelt wird - evtl. beim AfterUpdate der Form. Habe leider kein Access im Zugriff, nur die Online Hilfe.

Grüße vom marabu

API 28. Jul 2008 21:03

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von marabu
Hallo,

wenn ich das Problem richtig verstehe, dann geht es darum ein eigenes Ein-Ausgabe-Format für ein Access Formularfeld zu definieren. Dazu würde ich ein ungebundenes Textfeld mit Eingabemaske 9990:00 verwenden. Dann würde ich beim Ereignis BeforeUpdate des Feldes den String in das interne Zeitformat umrechnen. Die Rechenschritte dürften nicht das Problem sein, aber es muss noch das Ereignis identifiziert werden, bei dem der interne Wert in die Darstellungsform gewandelt wird - evtl. beim AfterUpdate der Form. Habe leider kein Access im Zugriff, nur die Online Hilfe.

Grüße vom marabu


Hallo marabu, danke für die Antwort - scheint mir die erste sehr brauchbare zu sein, welche auch auf die Fragestellung eingeht.

Jelly 29. Jul 2008 07:19

Re: Datenbank mehr als 24h
 
Zitat:

Zitat von API
Hallo marabu, danke für die Antwort - scheint mir die erste sehr brauchbare zu sein, welche auch auf die Fragestellung eingeht.

Ich finde du hast hier schon einige brauchbare Antworten bekommen, nicht nur die letzte von Marabu. Sämtliche (CaclulatedField, OnGetText und OnSetText...) helfen dir schon. Und wenn du nicht weisst, wie du das in Access speichern sollst, dann musst du das dort lesen. Um eine Umwandlung kommst du nicht herum, und genau zu diesem Punkte galten hier sämltiche Antworten. Wenn du der Meinung bist, dass diese alle an deiner Frage vorbei schliddern, dann solltest du dir vielleicht überlegen, deine Frage genauer zu stellen, anstatt auf die anderen Forenuser zu motzen, sie würden nicht auf deine Frage antworten, die mir persönlich eigentlich immer noch nicht ganz klar ist.


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