![]() |
Event bei Zeilenwechsel einer DataSource
Hallo,
ich bin mir so sicher, dass dieses Thema bereits bearbeitet wurde. Trotzdem finde ich selbst leider keine Lösung und hoffe daher hier ein paar Tipps zu finden. IST: Ich habe eine Query mit mehreren Datensätzen. Die Ergebnismenge wird mit einem Grid dargestellt. Die Datensätze werden im Programm abgerufen, geändert, gelöscht oder um weitere Daten und Datensätze ergänzt. Die Datenmengen werden normal mit Tastatur und Maus gesteuert. SOLL: Nur wenn ich einen Datensatz wechsle, soll ein Event gestartet werden. Dieses Event ist etwas größer, daher kann ich es nicht bei jeder kleinen Änderung, also OnDataChange, aufrufen. Daher habe ich gedacht, dass ich mit dem DataSource.State in [dsBrowse] richtig wäre, leider scheint dies nicht der Fall zu sein. Ich glaube es ist die richtige Richtung, leider habe ich mich bereits im tiefen Jungle von Delphi verirrt. Warum gibt es nicht einfach ein Event wie OnRowChange im TDataSource? Dankbar über jede Anmerkung L. |
AW: Event bei Zeilenwechsel einer DataSource
Eventuell sowas?
![]() ![]() Ja, so eine Doku kann schon schön sein ... |
AW: Event bei Zeilenwechsel einer DataSource
Und natürlich hat auch die DataSource ein passendes Event. (OnStateChange und/oder OnUpdateData reagieren auch auf sowas)
Oder man hängt einen DataLink an die DataSource und verwendet dann dessen Events. Bei Grids kann man sich oftmals an den DataController hängen, welche derartige Events bietet. |
AW: Event bei Zeilenwechsel einer DataSource
Hallo und danke für die bisherigen Antworten!
Die Kombination aus Anfänger und Delphi 2007 zeigt leider, dass ich kein TDataset habe. Mein Fehler, die Version oder meinen Intelligenzgrad nicht anzugeben. Den Lösungshinweis das ganze über OnStateChange zu realisieren habe ich schon im Internet gelesen. Allerdings nur den Hinweis. Was passiert aber wenn ich nur durch die Zeilen wechsle? Bleibt die Datasource nicht im State dsBrowse (folglich kein OnChangeEvent)? Werde mich weiterhin damit beschäftigen und meine Fühler noch tiefer in das www graben. Gruß |
AW: Event bei Zeilenwechsel einer DataSource
Mit der TDataSource allein kannst du ja nicht auf eine Datenbank zugreifen.
Das macht afaik immer ein TDataSet. Die TDataSource bereitet die Daten eines TDataSet dann nur so auf, dass sie in der GUI dargestellt werden können. D.h. man muss zwingend eine Form von TDataSet haben. Ob das jetzt ein TTable, ein TQuery, ein TZQuery, ein TClientDataSet oder sonst was ist, spielt dabei keine Rolle, da diese alle in irgend einer Weise von TDataSet erben. Ich würde dann das von Sir Rufo erwähnte AfterScroll bzw. BeforeScroll verwenden. |
AW: Event bei Zeilenwechsel einer DataSource
Wenn du eine DataSource hast, dann hast du auch ein DataSet, denn die DataSource ist die Brücke zwischen den DBControls (DBGrid, DBEdit, etc.) und einem DataSet.
Die Eigenschaft bei der DataSource heißt zufällig auch DataSet und erwartet etwas vom Typ TDataSet ;) |
AW: Event bei Zeilenwechsel einer DataSource
Hallo,
danke jetzt habe ich es verstanden :thumb: Ich hatte es gerade selbst mit einer anderen Methode gelöst, werde aber wohl auf die Scoll-Events umsatteln. Selbst hatte ich im OnDataChange der TDataSource, eine Abfrage des .State genutzt. Hinzukommend musste ich um einen Datensatzwechsel zu bemerken, stets die zuletzt angewählte ZeilenNr merken.
Code:
Da man jedoch, wie ich es bereits ein paar mal in diesem Forum gelesen habe, globale Variablen vermeiden sollte, wäre die .AfterScroll Variante eine bessere.
procedure Tfbestelldetails.ds_archivDataChange(Sender: TObject; Field: TField);
begin if (ds_archiv.State in [dsBrowse]) and (selected_row <> query_archiv.RecNo) then begin selected_row := query_archiv.RecNo; ... end; end; Ich bedanke mich für jegliche Hilfe und hoffe das auch dem einem oder anderem ebenfalls geholfen sein wird. Gruß |
AW: Event bei Zeilenwechsel einer DataSource
Da das abarbeiten deines Events nach deiner Aussage etwas länger dauert:
Ich hab das auch mal gebraucht und hatte dann immer Probleme, wenn der Nutzer mit den Pfeiltasten ganz schnell durch meine Daten gelaufen ist. Da hab ich dann in dem Event immer einen Timer gestartet für ein paar Millisekunden und dieser hat dann erst die eigentliche Funktion gestartet. Wurde zwischenzeitlich zu einem weitereren Datensatz gewechselt wurde der Timer neu gestartet. Ich hab übrigens genau wie du DataChange usw. benutzt. Kann es sein das es AfterScroll usw. in D6 noch nicht gab und ich mir das daher so angewöhnt habe? |
AW: Event bei Zeilenwechsel einer DataSource
Hallo Jumpy,
danke für deinen Hinweis, die Idee mit dem Timer werde ich vll auch einsetzen. Das würde mir einige unnütze SQL-Abfragen ersparen. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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