AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Benachrichtigung, wenn sich ein Feldinhalt ändert
Thema durchsuchen
Ansicht
Themen-Optionen

Benachrichtigung, wenn sich ein Feldinhalt ändert

Ein Thema von Christian Seehase · begonnen am 7. Sep 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#1

Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 7. Sep 2006, 16:00
Datenbank: MS SQL 2000 • Zugriff über: ADO
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
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 7. Sep 2006, 16:12
*mal blind drauflos rat*
gibts nich sowas wie "AfterOpen" oder "AfterScroll" bei dem Dataset? Lässt sich damit in deinem Fall nicht arbeiten?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 7. Sep 2006, 16:25
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 7. Sep 2006, 18:11
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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 7. Sep 2006, 18:39
Moin Martin,

super, danke.
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


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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 12. Sep 2006, 14:20
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 12. Sep 2006, 14:45
Warum sollte das OnChange Event eigentlich aufgerufen werden? Es ändert sich doch nix oder?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 12. Sep 2006, 15:03
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 12. Sep 2006, 18:07
Zitat von Christian Seehase:
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.
Du musst dich mit der Klasse TDataLink anfreunden, wenn die ein Control (TRadioButton) zu einem datensensitiven Control aufrüsten möchtest.
Aber warum suchst du dir nicht einfach eine TDbRadiobutton Komponente im Internet
oder nimmst die im Anhang???
Angehängte Dateien
Dateityp: zip dbbitwise_206.zip (3,4 KB, 6x aufgerufen)
Andreas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Benachrichtigung, wenn sich ein Feldinhalt ändert

  Alt 12. Sep 2006, 19:04
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

Dennoch begreife ich nicht, warum die Ereignisse nicht ausgelöst werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz