![]() |
TDBCheckBox: .Checked aktualisiert das DataSet nicht
Hallo,
wie der Titel schon sagt, folgendes Szenario: ClientDataSet -> DataSource -> DBCheckBox Markiere ich selbst die CheckBox, wird das ClientDataSet korrekt aktualisiert, mache ich das per Code CB.Checked := True, passiert nichts. Ist das so gewünscht oder ein Bug der VCL? |
AW: TDBCheckBox: .Checked aktualisiert das DataSet nicht
Die Frage kann ich jetzt nicht beantworten, aber wenn man's doch im Code macht, könnte man doch einfacher direkt das ClientDatatset-Feld ändern. Dann würde die Checkbox auch autom. als gechecked angezeigt.
|
AW: TDBCheckBox: .Checked aktualisiert das DataSet nicht
Hallo,
ah ja, das direkte Setzen des DataSets löste das Problem ;) Vielen Dank! |
AW: TDBCheckBox: .Checked aktualisiert das DataSet nicht
Zitat:
Sobald der Datensatzzeiger danach wieder bewegt wird, löst das automatisch ein MyQuery.Post aus, ansonsten muss man das Post selbst ausführen. Bei Checkboxen, die mit Boolean-Feldern in der Datenbank zusammenhängen, verwenden wir nur selten die DBCheckBox, weil die nicht automatisch auf Änderungen reagiert, sondern sich auf die im zugrundeliegenden Query befindliche Datenmenge bezieht. Am besten, so finde ich, fährt man, wenn man für alle im Programm vorkommenden Datenbank-Zugriffe entsprechende Methoden schreibt, die direkt SQL-Befehle an die Datenbank schicken und entsprechende Aktualisierungsbefehle ausführen (Refresh). |
AW: TDBCheckBox: .Checked aktualisiert das DataSet nicht
Hallo,
ich verwende nie DB-Komponenten. Ist aber nicht mein Code, ich muss den nur warten. |
AW: TDBCheckBox: .Checked aktualisiert das DataSet nicht
Zitat:
Da wäre zuerst einmal der Code für die Aktualisierung der TCheckBox. Wir lösen das gerne mit einem AfterScroll-Ereignis, das wiederum in der jeweils aktuellen Form ein Ereignis auslöst. Dieses Ereignis, das wir meist im zutändigen Datenmodul deklarieren, weisen wir dann in der aktuellen Form einer Aktualisierungs-Methode zu. Damit ist gewährleistet, daß die TCheckBox immer aktualisiert wird, nachdem sich der Datenzeiger bewegt hat. Für den umgekehrten Fall der Änderung durch den Anwender verwenden wir in den jeweiligen Forms Update-Methoden, die in der OnClick-Ereignisbehandlung der TCheckBox angesprungen werden. Mit dieser Vorgehensweise haben wir das Problem für alle Zeiten erledigt. Nachtrag Sollte es dir nicht gestattet sein, derartige Änderungen im Code vorzunehmen, könntest du auch auf das OnClick der TDBCheckBox reagieren und schauen, ob sich das zugehörige Dataset nach dem Click auf TDBCheckBox im Editmodus befindet:
Delphi-Quellcode:
... nur mal so als Denkansatz ...
if MyDataset.State = dsEdit then
begin MyDataset.Post; end else if MyTDBCheckBox.Checked <> MyDataset.FieldByName('BooleanFeld').AsBoolean then begin MyDataset.Edit; MyDataset.FieldByName('BooleanFeld').AsBoolean := MyTDBCheckBox.Checked; MyDataset.Post; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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