![]() |
Datenbank: MS SQL 2000 • Zugriff über: ADO
Benachrichtigung, wenn sich ein Feldinhalt ändert
Moin Zusammen,
ich stelle den Inhalt eines TWordField mit Hilfe von TRadioButton dar. Um diese Beiden Komponenten zu verbinden, verwende ich das TWordField.OnChange- und das TRadioButton.OnClick-Ereignis. Diese Events werden beim Programmstart im TForm.OnCreate (TRadioButton) bzw. TDataModule.OnCreate (TWordField) zugewiesen. Zum Testen habe ich es auch schon mit dem entsprechenden TADODataSet.FieldByName(...).OnChange versucht. Die Datenbankkomponenten habe ich auf einem TDataModule zusammengefasst. Im TWordField.OnChange wird eine Prozedur aufgerufen, die bei dem entsprechenden RadioButton die Eigenschaft Checked auf true setzt, und im TRadioButton.OnClick wird der jeweilige Wert dem TWord.Field.Value zugewiesen. Um keine Endlosschleife zu erhalten, merken sich die Routinen die Adresse des Eventhandlers und setzen die jeweilige Eigenschaft auf nil. Am Ende der Routine wird der Eventhandler dann wieder eingetragen. Wenn ich einen RadioButton anklicke klappt auch alles wie es soll, und der TDBNavigator meldet auch, dass sich der Datensatz geändert hat. Weise ich dem TWordField.Value bei aktivem OnChange-Eventhandler einen Wert zu so wird diese Routine auch aufgerufen. Starte ich das Programm, so wird diese Routine allerdings nie aufgerufen :gruebel: Es ist sichergestellt, dass TWordField.OnChange auch auf die Routine verweist, bevor noch der TADODataSet geöffnet wird. Auch wenn ich mit dem TDBNavigator durch die Sätze durchgehe passiert dort nichts. Ich habe es auch schon mit verschiedenen Events des TADODataSets probiert (OnWillChangeField, OnRecordSetChangeComplete, OnFieldChangeComplete): Sie werden niemals ausgelöst... Auch hier ist sichergestellt, dass Eigenschaften vor dem Zugriff auf die Datenbank korrekt gesetzt sind. Mache ich hier irgendwo einen grundsätzlichen Fehler? Hat noch jemand eine Idee, was ich noch ausprobieren könnte? Danke. |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
*mal blind drauflos rat*
gibts nich sowas wie "AfterOpen" oder "AfterScroll" bei dem Dataset? Lässt sich damit in deinem Fall nicht arbeiten? |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Moin Martin,
leider kann ich mit solchen Ereignissen nichts anfangen, da explizit wissen muss, welches Feld sich geändert hat. Aber danke für die Idee, so bin ich wenigstens darauf gekommen, dass andere Ereignisse durchaus ausgelöst werden, nur die, die ich gebrauchen könnte in erster Linie nicht :wall: |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
OK hab grad was gefunden.. du benutzt doch sicher auch ne TDataSource oder? Die hat ein OnDataChange-Ereignis bei dem das TField übergeben wird, vllt hilft dir das weiter?
|
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Moin Martin,
super, danke. :thumb: Das funktioniert zwar nicht so schön, wie ich es mir ursprünglich gedacht hatte, aber damit lässt es sich offensichtlich "hinbasteln" Nur zur Info: Wenn der Wert für Field = nil ist, wurde der gesamte Record geändert, und ich muss für jedes Feld einmal die OnChange-Routine aufrufen. Ist Field <> nil muss ich nur die Routine für das jeweilige Feld aufrufen. Alles habe ich mir nach passenden Events durchgeschaut, nur TDataSource nicht :wall: :oops: Auch wenn es jetzt wohl zu einer funktionierenden Lösung geführt hat, bin ich dennoch neugierig, wieso das andere nicht funktioniert. Falls also jemand dazu noch eine Idee hat: Nur raus damit ;-) |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Moin Zusammen,
falls sich jemand finden sollte, der das Eingangs erwähnte Problem erklären kann... ;-) Ich kann zur Zeit nämlich leider nicht verstehen, warum die diversen Events nicht ausgelöst werden. Derzeit erscheint mir deren Existenz ziemlich sinnlos. |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Warum sollte das OnChange Event eigentlich aufgerufen werden? Es ändert sich doch nix oder?
|
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Moin Martin,
offensichtlich doch, denn das OnDataChange funktioniert ja, nur das OnChange der einzelnen Felder wird nicht aufgerufen, ausser ich weise explizit einem Feld einen Wert zu. Aus dem OnDataChange rufe ich dann, nach Ermittlung des betroffenen Feldes, das OnChange des Feldes auf. Auf den Umweg würde ich nur gerne Verzichten ;-) |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Aber warum suchst du dir nicht einfach eine TDbRadiobutton Komponente im Internet oder nimmst die im Anhang??? |
Re: Benachrichtigung, wenn sich ein Feldinhalt ändert
Moin Shmia,
danke für den Tip. TDataLink schaue ich mir mal an. Das kann ich bestimmt für meine Tri-State Checkboxen gebrauchen (cbChecked/cbUnchecked/cbGrayed) Die TDBRadioGroup habe ichzwischen auch entdeckt :oops: :wall: Dennoch begreife ich nicht, warum die Ereignisse nicht ausgelöst werden. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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 by Thomas Breitkreuz