AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Event bei Zeilenwechsel einer DataSource
Thema durchsuchen
Ansicht
Themen-Optionen

Event bei Zeilenwechsel einer DataSource

Ein Thema von LoewenZahn · begonnen am 28. Jan 2014 · letzter Beitrag vom 30. Jan 2014
Antwort Antwort
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Event bei Zeilenwechsel einer DataSource

  Alt 28. Jan 2014, 16:02
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.
Tim
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Event bei Zeilenwechsel einer DataSource

  Alt 28. Jan 2014, 16:04
Eventuell sowas?
Delphi-Referenz durchsuchenTDataset.BeforeScroll
Delphi-Referenz durchsuchenTDataSet.AfterScroll

Ja, so eine Doku kann schon schön sein ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: Event bei Zeilenwechsel einer DataSource

  Alt 28. Jan 2014, 17:04
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Jan 2014 um 17:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Event bei Zeilenwechsel einer DataSource

  Alt 29. Jan 2014, 07:23
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ß
Tim
  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
 
#5

AW: Event bei Zeilenwechsel einer DataSource

  Alt 29. Jan 2014, 07:32
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.
Martin Weber
Ich bin ein Rüsselmops

Geändert von Angel4585 (29. Jan 2014 um 07:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Event bei Zeilenwechsel einer DataSource

  Alt 29. Jan 2014, 07:33
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Event bei Zeilenwechsel einer DataSource

  Alt 29. Jan 2014, 08:33
Hallo,

danke jetzt habe ich es verstanden

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:
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;
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.

Ich bedanke mich für jegliche Hilfe und hoffe das auch dem einem oder anderem ebenfalls geholfen sein wird.

Gruß
Tim
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Event bei Zeilenwechsel einer DataSource

  Alt 29. Jan 2014, 09:12
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?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von LoewenZahn
LoewenZahn

Registriert seit: 10. Okt 2013
22 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Event bei Zeilenwechsel einer DataSource

  Alt 30. Jan 2014, 08:12
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ß
Tim
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 10:42 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