zu meinem Terminplaner (siehe hier http://www.lazarusforum.de/viewtopic.php?p=64872#p64872) hat sich ein neues, allerdings anders geartetes Problem hinzugesellt.
Ich habe eine PostgreSQL-Datenbank auf die ich mit ZEOS zugreife (einfach eine DBGrid mit der Datenbank verbunden). Eingabe von Text, Datum, Zeit funktioniert alles wunderbar. Allerdings darf man sich beim Datum- und Zeiteingeben nicht vertippen, sonst gibts ne Exception. Also wie in dem anderen Thema schon geschrieben, wollt ich Fehleingaben vermeiden, mittels eines eigenen MaskEdits. Datum funktioniert soweit gut. Beim gleiche Vorgehen mit einer Zeiteingabe tritt folgendes Problem auf:
Code: Alles auswählen
procedure TTermineForm.TimeUpdate; //macht das Update des aktuellen Records
var
NewTime:TDateTime;
procedure RecordWriteln; //Schreibt den Inhalt des aktuellen Query-Records ins Konsole-Fenster
var
s: String;
x: Integer;
begin
s:='';
for x:=0 to Query.FieldCount-1 do
case Query.Fields[x].DataType of
ftString: s:=s + 'String['+Query.Fields[x].AsString+'] ';
ftDate: s:=s + 'Date['+DateToStr(Query.Fields[x].AsDateTime)+'] ';
ftTime: s:=s + 'Time['+TimeToStr(Query.Fields[x].AsDateTime)+'] ';
else s:=s + 'Else['+Query.Fields[x].AsString+'] ';
end;
Writeln(s);
end;
begin
TimeChanged := False; //Rücksetzen der "Change"-Markierung
Writeln('Record vor neuer Zuweisung:');
RecordWriteln;
if TryStrToTime(MaskEdit.Text, NewTime) then begin //Nur zuweisen, wenn Time i.O.
Query.Fields[AktField].AsDateTime:=NewTime; //Nachfolgende Aufrufe haben Record eigentlich ordentlich gefüllt
// Query.Fields[AktField].AsFloat:=NewTime;
// Query.Fields[AktField].AsString:=TimeToStr(NewTime);
// Query.Fields[0].AsString:='Grummel Grummel, der Test wird gepostet, nur die Zeit nicht...'; //Mache ich das UpDate hier, geht das!
end else
Query.Fields[AktField].AsString:=''; //kein Datum zuweisen
Writeln('Record hat neuen Inhalt:'); //neue Zeit wird ordentlich im Record angezeigt
RecordWriteln;
Query.UpdateRecord;
Writeln('Record nach Update:'); //Time ist auf 00:00:00 gestellt
RecordWriteln;
Query.Refresh;
end;
Ist das ein Bug?
Ist mein Vorgehen falsch?
Eingabe der Zeit in die Tabelle per SQL bekomme ich hin, wollt das aber eigentlich nicht so machen... [Edit] getestet, Update von Time per Hand mittels SQL geht