Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Aktuelles Datum und Uhrzeit in Datenbank speichern (https://www.delphipraxis.net/1538-aktuelles-datum-und-uhrzeit-datenbank-speichern.html)

Megabyte 6. Dez 2002 15:38


Aktuelles Datum und Uhrzeit in Datenbank speichern
 
Hallo ihr Programmierer :lol:

will die Uhrzeit und das aktuelle Datum in 2 Datenbankfelder vom Typ date resktive time speichern. Habe dazu die 2 Komponenten ODDBTimepicker für die Zeit und DBDateTimepicker fürs Datum installiert. Dies kann ich auch wunderbar auf Form plazieren und solange keine Datenbank verknüpft ist mit einem Tableobjekt zeigt es auch die Zeit und das richtige Datum an. Nur wie bringe ich das ganze zusammen damit ich die Zeit und das Datum speichern kann in der Datenbank(mysql via mysqldac).Wer weiss wie ich das richtig anpacken muss. Übe nun schon seit Stunden :cry: :cry: und bringe das einfach nicht zustande. Habe immer nur Fehlermeldungen.
Bin DelphiNeuling

cu Megabyte

Hansa 6. Dez 2002 16:31

Hi,

bei SQL gibt es doch den Type Timestamp (= Zeitstempel), vergleichbar mit DateTime in Delphi. Dann hast Du Datum und Uhrzeit in EINER Variable.

Reicht das nicht ??? :dancer:

Gruß
Hansa

Megabyte 6. Dez 2002 16:47

Hy ,
leider reicht die timestamp nicht aus da ich zeit und datum in getrennten
datenbankfeldern hab ausserdem kommt die zeit 2 mal vor also bin ich gezwungen dies in separate spalten schreiben zu lassen.Die TimePicker Komponente wäre schon recht wenn nicht immer ein Fehler von der Datenbank
kommen würde, dass die Daten nicht korrekt seien.(0.7322000 is not a valid timestamp).Ausserdem stellt es den TimePicker immer auf 0 also nicht auf das aktuelle Datum oder Uhrzeit.
Wer weiss was ich ändern muss????

Cu Megabyte

Hansa 6. Dez 2002 17:08

Hi,

dann schreib doch von mir aus 10 Timestamps in die DB. Wer hindert Dich daran ?
Zitat:

0.7322000 is not a valid timestamp).
Das da sieht so nach Bruchteilen eines Tages oder sogar von Sekunden aus. Den Time-Picker brauch ich nicht, aber ist das nicht eine Art Stoppuhr für Hundetstelsek. ?

Gruß
Hansa

Megabyte 6. Dez 2002 18:06

Hi
also die Sache ist so: wenn die timestamp in ein dbedit feld geschrieben werden kann auf geteilt in zeit und datum je ein dbedit und dies beim start de formulars die aktuelle timestamp erstellt würde das schon reichen. Ich weiss nur nicht wie man eine solche timestamp erstellt und in die felder programmiert damit es funktioniert.
Irgend wer muss doch so etwas schon mal gemacht haben.
Hier nocheinmal was ich machen will:
ich habe eine datenbank mit den feldern datum,inzeit,auszeit.
Beim Start des Formulars wird ein neuer Datensatz erzeugt und die dbedit(oder ?felder) sollten mit dem datum und der aktuellen Uhrzeit vorbesetzt sein. Der User kann jetzt Datum ,Inzeit und Auszeit ändern oder so wie es ist speichern.

Wer weiss ob dies mit einer oben beschriebenen timestamp geht oder der datapicker oder sonst eine komponente nötig ist.
wer weiss wo ich ein beispiel finde.

merci fürs helfen

cu megabyte

Hansa 6. Dez 2002 19:04

Hi,

was ist denn Inzeit und Auszeit ? Es ist wirklich mühsam das zu verstehen, was Du schreibst. Zumindest ich verstehe den Zusammenhang nicht.

Gruß
Hansa

Hansa 6. Dez 2002 19:18

Als Anhaltspunkt :

Code:
WITH LiefModul.LiefDS DO BEGIN
  active := false;
  SelectSQL.Text := 'SELECT * FROM LIEF8 WHERE NR='+Edit1.Text;
  active := true;
  IF IsEmpty THEN BEGIN
    Showmessage ('neuer Datensatz !');
    insert;
    FieldByName ('LIEFSEIT').value := Today;
    FieldByName ('NR').value := StrToInt (Edit1.text);
  END
END;
Der Code legt einen neuen Datensatz an und besetzt die Werte Lieferanten-Nr. und das Feld, wann der Lieferant angelegt wurde vor. Allerdings mit SQL :!:

Gruß
Hansa

DKamps 7. Dez 2002 11:52

Typen beachten
 
Das Problem sind warscheinlich die Typen:
TTime ist intern ein Float wie von Dir als Fehler beschrieben, der die Anzahl der Tage bezeichnet, also zwischen 0 und 1 liegt. Ein Datum zählt entsprechend die Tage seit dem (1.1.1900 oder so). Beim Speichern in der Datenbank ist jetzt auf die korrekte Typumwandlung zu achten, also z.B.

MyTable.MyDatum.AsDateTime := StrToDate(Edit1.Text);
MyTable.MyDatum.AsString:= Edit1.Text;

MyTable.MyTime.AsDateTime := StrToTime(Edit1.Text);
MyTable.MyTime.AsInteger := round(DateTimePicker.Time *SecsPerDay);

Hansa 7. Dez 2002 12:55

Hi Megabyte,

DKamps Statement ist kaum noch was hinzuzufügen.

In meinem Beispiel :

Code:
FieldByName ('LIEFSEIT').value := Today;
ist das today schon vom richtigen Typ. Ansonsten mußt Du das so machen, wie er schreibt. Eins vielleicht noch : Nimmst Du ein Timestamp mußt Du den Typ so umwandeln :

Feld.AsDateTime := StrToDateTime (Edit....);

Außerdem würde ich mir mal in der Delphi-Hilfe die Formatierungsregeln solcher Zeit/Datumsfelder ansehen. Dort steht ausnahmsweise mal nicht drin : Wollen Sie die Funktion xy benutzen, so benutzen Sie die Funktion xy. :mrgreen:

Gruß
Hansa


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