DateTimePicker für Datenbankeinträge verwenden
-
nabend,
hab mir mal nen DateTimePicker auf meine Form gezogen um einmal nur das Datum in eine Datenbank zu schreiben und einmal nur die Uhrzeit!
wenn ich allerdings die Felder ausgebe dann kommt jedesmal das datum 30.12.1899 mit dazu raus.
hab bei der Uhrzeit schon versucht das ganze zu formatieren --> DateTime_SetFormat(dtp_wvzeit->Handle, "HH:mm");
selbes ergebnis datum wird mit reingeschrieben...
habts ihr eine idee woran es liegen könnte?mfg
hckEdit:
Bitte aussagekräftige Überschriften verwenden. Danke!
-
Hallo
das Datum ist der Null-Wert von TDateTime. Das bedeutet das die SQL-Datenbank kein gültiges Datum bekommt, bzw. das Datum nicht korrekt ist.
Bei MySQL zum Beispiel muß das Datum im Form YYYY-MM-DD sein.Um dir das zu ersparen kannst du aber bei den TQuery-Komponenten die Params-Eigenschaft benutzen. Da kannst du direkt ein TDateTime übergeben, das dann automatisch in das korrekte Format ungewandelt wird.
bis bald
akari
-
Welchen Typ haben die Felder in der Datenbank? Eins ist Date und das andere entsprechend Time?
-
richtig ist eine access db -> WVZeit mit der Einstellung 00:00 WVDatum mit der Einstellung 00.00.0000
-
Hm, Du hast diese Datei direkt in Access erstellt? Dort kann man nur Datum/Uhrzeit auswählen...
Ich frage mich, ob es einen Unterschied macht, wenn die Tabelle über eine SQL-Anweisung erstellt wird, die explizit die Typen DATE und TIME für die Spalten verwendet. Probier es mal aus. Kann natürlich auch sein, dass einfach nur Access wieder an seine Grenzen gelangt und einfach nicht mit reinen Zeitwerten umgehen kann.
Müssen das überhaupt 2 Felder sein? Reicht nicht ein Feld vom Typ TIMESTAMP?
-
mh im Grunde würde ein Feld typ TimeStamp reichen bloß brauche ich datum und uhrzeit gesplittet ohne das ich das ganze auslesen muss in einen ansistring reinlade da alles hinterdem datum wegschneide un dann das gleiche nochmal für die uhrzeit mache das ist denk ich mal unnötige zeitverschwendung ...
-
Wenn Du das Datum direkt in eine TDateTime-Variable liest, kannst Du Datums- und Uhrzeitanteil getrennt weiterverwenden, ohne irgendwelche Konvertierungen durchführen zu müssen. Schau Dir TDateTime mal im Detail an.
-
habs mal auf einen test ankommen lassen allerdings nicht mit dem DateTimePicker..
und zwar
TBookmark test; test = t_adrliste->GetBookmark(); AnsiString datum = DateToStr(Date()); AnsiString zeit = TimeToStr(Time()); t_adrliste->GotoBookmark(test); t_adrliste->Edit(); t_adrliste->FieldByName("E2Text")->AsString = DBEdit2->Text; t_adrliste->FieldByName("E2Datum")->AsString = datum; t_adrliste->FieldByName("E2Uhrzeit")->AsString = zeit; t_adrliste->Append(); t_adrliste->GotoBookmark(test);also normalerweise müsste beim datum jetzt ja 14.09.2006 stehen bei der Uhrzeit halt die uhrzeit sagen wir 15:06:45 hehe so stehts auch in der datenbank lasse ich das ganze ausgeben per TDBEdit steht beim datum das richtige bei der Uhrzeit wieder mal 31.12.1899 mit der uhrzeit die logik versteh ich einfach nicht....
-
TBookmark test; test = t_adrliste->GetBookmark(); TDateTime Datum = TDateTime::CurrentDate(); TDateTime Zeit = TDateTime::CurrenTime(); t_adrliste->GotoBookmark(test); // Sicher, das überhaupt ein Bookmark vorhanden ist? t_adrliste->Edit(); // aktuellen Datensatz bearbeiten, willst Du das hier wirklich? t_adrliste->FieldByName("E2Text")->AsString = DBEdit2->Text; t_adrliste->FieldByName("E2Datum")->AsDateTime = Datum; t_adrliste->FieldByName("E2Uhrzeit")->AsDateTime = Zeit; t_adrliste->Append(); // wo ist der Post()? was willst Du jetzt hier noch einfügen?31.12.1899 deutet darauf hin, das kein Wert eingetragen wurde, das Feld also entweder NULL oder 0 enthält.
-
inwiefern soll da kein wert eingetragen sein?? ist doch in der db steht nur die zeit bloß bei ausgabe dieser gibts halt noch dieses schicke datum mitdazu dein codebsp verhilft auch zu keiner besserung...
trotzdem danke werd mal schauen ob ich noch ne lösung dafür finde ^^
-
Dann ist vermutlich das Datenbankfeld falsch angelegt. Wie gibst Du das Feld aus?
-
also hab ne ganz normales TTable, TDataSource drin.
und dann 2TDBEdit- Felder eins fürs datum eins für die Uhrzeit zwecks übersichtlichkeit, DataField ist halt auf das jeweilige Feld in der db eingstellt.
das feld von der uhrzeit ist auf Zeit, 24h und dem eingabeformat 00:00;0;_ also rein theopraktisch müsste es gehen und stimmen denk ich zumindest.
-
Hm, Access DB und TTable... Ich wünsch Dir viel Spaß beim herumexperimentieren, helfen kann man da nicht. TTable ist veraltet und sollte nicht mehr verwendet werden (wenn dann nur mit Paradox oder dBase) und Access ist bestenfalls als eigenwillig zu bezeichnen.
-
meine rede aber mein chef ist sehr eigenwillig sql möcht er net haben

--------Edit-----------
habs jetzt in ein TDBEdit Feld gelegt -> ohne Probleme ^^
-
heckticker schrieb:
meine rede aber mein chef ist sehr eigenwillig sql möcht er net haben

Das könnte sich irgendwann fürchterlich rächen...

Hast Du es jetzt über ein TDateTime::TimeString() gelöst? Oder was hast Du gemacht?
-
TDateTime Datumuhrz = TDateTime::CurrentDateTime();
sowie
AnsiString Datumuhrz = DateTimeToStr(Now());beides uhrzeit und datum werden gespeichert wobei letzteres mir besser gefällt warum auch immer ^^, ausgabe erfolgt in einem TDBEdit feld klappt wunderbar sieht halt bloß net schön aus
aber was solls mein chef ja auch nicht 
-
noch kurz zum Thema TDateTimePicker worum es eigentlich ging
lösche einfach alles vor der Zeit sowie nach dem datum und schwups kommts so in die dbok mit dem datum klappts mit der uhrzeit nich ich glaub i geh hier kaputt