![]() |
Datenbank: Oracle, aber eigentlich egal • Version: 9, 10 • Zugriff über: BDE, aber ebenfalls egal
TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Moin moin,
ich habe folgendes Problem. Auf einer Eingabemaske befinden sich mehrere TDBEdit-Boxen und TDBLookupComboBoxen. Sobald in einem TBEdit ein Wert eingegeben/verändert wurde, wird in einem onValidate-Event-Handler eine Stored Procedure (für alle TFields wird dieselbe SP verwendet) auf gerufen, welche die anderen Feldwerte ermittelt. Diese werden dann in die entsprechenden DB-Felder geschrieben. Dadurch ändert sich natürlich auch der Wert der TField-Objekte und somit auch der Edit- und Comboboxen, was sofort wiederum ein neues onValidate für die TFields auslöst. Damit nun dadurch keine Endlosschleife ausgelöst wird, werden der Stored Procedure zwei zusätzliche Parameter übergeben, zum einen den Sender der das aktuelle onValidate ausgelöst und den "Initial_Sender", also das Object, welches das erste onValidate ausgelöst hat. Um diesen zu ermitteln wird zusätzlich das OnSetText-Event von TField abgefangen. Diese wird ausgelöst, unmittelbar nachdem man in einem TEdit einen Wert eingibt/ändert. Doch leider funktioniert das nur mit TDBEdit. Eine TDBLookupComboBox löst kein OnSetText-Ereignis aus, wenn ein anderer Eintrag ausgewählt wird. Ich suche nun eine Möglichkeit auch für eine LookupComboBox den "Initial_Sender" zu ermitteln, also etwas in der Art
|
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Moin Rainer.
Das Problem mit Intra-Record-Abhängigkeiten hast du auch ohne eine Anbindung an eine Datenbank. Durch die Übermittlung von Sender und Initial Sender an die Stored Procedure schaffst du eine enge Kopplung zwischen GUI und Datenmodell. Ich würde versuchen die Steuerung vollständig im GUI zu belassen. Für die einmalige Benachrichtigung darüber, dass der Inhalt eines Datenfeldes sich geändert hat, würde ich nicht auf das Ereignis OnSetText() der Field-Komponente, sondern auf das Ereignis OnDataChange() der DataSet-Komponente zurückgreifen. Freundliche Grüße vom marabu |
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Moin Marabu,
Zitat:
Zitat:
|
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Ich hole diesen Thread noch einmal nach oben. :duck:
|
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Hallo Rainer,
wenn du für dein Datenmodell ein GUI implementiert hast, welches auf datensensitiven Komponenten basiert, dann erschließt sich mir der Sinn der Stored Procedure nicht ohne weiteres. Kannst du das noch ein wenig aufhellen? Zitat:
Zitat:
Zitat:
Freundliche Grüße marabu |
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Moin marabu,
Zitat:
Eine Artikelverwaltung ist bei unterschiedlichen Kunden im Einsatz. Für jeden Artikel wird z.B. der Verkaufspreis anders kalkuliert. Du hast jetzt die Möglichkeit, diese Berechnungen im Programm fest zu verdrahten. Was macht nun der Kunde, wenn er einen Artikel hinzufügen will? Er müßte jedesmal das Programm anpassen und die Berechnungen einbauen. Und die einzelnen Kunden haben nun auch noch völlig andere Artikel. Das Programm würde zum Moloch werden oder man arbeitet mit kundenspezifischen Versionen. Der Ansatz ist nun, das diese Berechnungen ausgelagert werden. Dafür bietet sich eine DB wie ORACLE kann. Alles was weitestgehend standard bzw. kundenneutral ist wird über SP in einem Standard-Schema abgehandelt. Alle kundenspezifischen Berechnungen und DB-Aktionen befinden sich in dem jeweiligen Kundenschema. Kommt also ein neuer Artikel hinzu, werden Preisberechnung und alles andere in einer SP durchgeführt und über reine Parametrisierung dem jeweiligen Artikel zugewiesen. Das ist eine Arbeit von wenigen Stunden bzw. Tagen. Und glaube mir, ich kenne vergleichbare Programme, da ist das Einfügen eines neuen Produkts ein Projekt, daß mindestens über mehrere Monate geht. Zitat:
|
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Danke für deine Erläuterungen, aber das bringt zumindest mich noch weiter weg von OnValidate(). Das Kalkulationsmodell eines Kunden per Customizing als SP zu hinterlegen ist sicher nicht das verkehrteste, aber warum muss das so eng an das GUI gekoppelt werden? Ich würde für diesen Zweck sogar das OnDataChange() fallen lassen und die SP in einem Before-Insert-Trigger aufrufen. Aber das ist eine grundsätzliche Design-Frage und du hattest ja eigentlich nur nach einem einmaligen OnChange-Event für eine TDBLookupComboBox gefragt. TField.OnChange() sollte bei dieser Komponente doch ausreichen?
Freundliche Grüße marabu |
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Zitat:
Zitat:
|
Re: TDBEdit, TDBLookupComboBox, TField und OnSetText-Event
Hallo Rainer,
Zitat:
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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