Im TDBCheckbox ist ein Fehler, (daher schreib ich ...)
WinXP, Lazarus 0.9.26, Datenbank egal
Ich habe ein Datenbank-Feld Typ Integer. Dort steht 0 oder 1 drin.
In der Query ist diesem Feld die Events OnGetText / und OnSetText genutzt, dabei wird die "0" zu einem "-" und die "1" zu einem "Ja" umgewandelt, also für die Anzeige in der Tabelle.
In der TDBCheckbox Eigenschaft ValueChecked muss ich damit auch auf "Ja", ValueUnchecked auf "-" setzen. Damit funktioniert die Anzeige.
Wenn ich nun auf die Checkbox klicke erscheint eine Fehlermeldung da versucht wird in Field.AsString das "Ja" / "-" rein zu schreiben. Das gibt Bruch.
Behebung:
Datei "dbcheckbox.inc" / Funktion "procedure TDBCheckBox.UpdateData(Sender: TObject);" folgendermassen abgeändert:
Code: Alles auswählen
procedure TDBCheckBox.UpdateData(Sender: TObject);
var
NewFieldText: string;
begin
if State = cbGrayed then
FDataLink.Field.Clear
else
if FDataLink.Field.DataType = ftBoolean then
FDataLink.Field.AsBoolean:=Checked
else begin
if Checked then
NewFieldText:=FValueCheck
else
NewFieldText:=FValueUncheck;
// ToDo: use Field.Text
If Assigned(FDataLink.Field.OnSetText) Then /// <<<< Neue Zeile
FDataLink.Field.OnSetText(FDataLink.Field, NewFieldText) /// <<<< Neue Zeile
Else FDataLink.Field.AsString:=Trim(NewFieldText); /// <<< Else ist neu
end;
end;
Also ich checke erst mal ob es ein Event "FDataLink.Field.OnSetText" gibt, wenn ja, dann muss der Innhalt damit gewandelt werden. Ansonsten wird (wie früher) auf .AsString zugewiesen.
PS: Diese Änderung wird nur übernommen wenn Lazarus neu aufgebaut wird.