AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Prinzipielle Frage zu OnDataChange von Datasource

Prinzipielle Frage zu OnDataChange von Datasource

Ein Thema von ranger · begonnen am 18. Dez 2009 · letzter Beitrag vom 18. Dez 2009
Antwort Antwort
ranger

Registriert seit: 25. Mai 2007
9 Beiträge
 
#1

Prinzipielle Frage zu OnDataChange von Datasource

  Alt 18. Dez 2009, 09:17
Datenbank: Oracle • Zugriff über: ODAC
Hoffe jemand kann mir weiterhelfen, ich "verstehe" die Aufrufe des OnDataChange-Ereignisses nach aktivieren und nach refreshen einer Datenbankverbindung nicht ganz;

habe folgendes Problem: möchte bei einem Datensatzwechsel über das OnDataChange-Ereignis irgend eine externe Delphi-Funktion starten, die bestimmte Berechnung macht und Ergebnis zu dem gerade gewechselten Datensatz anzeigt;

nun habe ich das Problem dass

1.) beim aktivieren der zum Dataset gebundenen Query das OnDataChange bereits 3x ausgeführt wird, und immer mit dem selben Datasource.State

2.) beim Refresh das ereignis sogar 5x aufgerufen wird!!! ich möchte aber aus zeittechnischen Gründen die Berechnung, die ich im DataChange-Ereignis ausführe, nicht x-mal ausführen, sondern nur 1x!!!


Beim Datensatzwechsel klappts dann perfekt, Ereignis wird nur 1x aufgeführt! Aber ansonsten vergeude ich unnötige Rechenzeit durch unnötige Aufrufe.

Kann mir jemand erklären, warum das Ereignis so oft ausgeführt wird?


Wenn ich ein Grid von DevExpress zu dem DataSource hänge, dann erfolgt der OnDataChange-Aufruf sogar noch öfters.

Wie löst ihr prinzipiell solche Probleme? Ist das Koppeln an das OnDataChange der Datasource der richtige Ansatzpunkt?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Prinzipielle Frage zu OnDataChange von Datasource

  Alt 18. Dez 2009, 15:02
Hallo,

gleiches Problem beim TreeView.

Ich merke mir immer den letzten Datensatz (DB-Id),
in FormCreate auf -1 setzen
und wenn sich im OnChange die DB-Id ändert,
wird diese neue ID als "gemerkte" gesetzt
und eine eigene DataChange-Methode aufgerufen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
943 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Prinzipielle Frage zu OnDataChange von Datasource

  Alt 18. Dez 2009, 16:42
Hallo

am besten vermerkt ihr in einer Variablen IsRunning : Boolean ob ihr in eurer protected Routine seid und
in der Variablen CurrentID : Integer welcher der 'aktuelle' Datensatz ist.
zB.
Delphi-Quellcode:
...
type
  Txx = class(Txxx)
  private
   IsRunning : Boolean;
   CurrentID : Integer;
  protected
   procedure InternalDataChange;
  public
  end;
...
procedure Txx.DataChange(Sender: TObject);
begin
  if( (FDataLink.Field <> nil) and not FDataLink.DataSourceFixed) and
  ((FDataLink.KeyField.AsInteger <> CurrentID) and not IsRunning)) and
  ((FDataLink.KeyFieldName <> '') or (FDataLink.ImageNameFieldName <> '')) then
  begin
    ...
    InternalDataChange;
    ...
  end;
end;
...
Viele Grüße

Alter Mann
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:46 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