AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDataSet.Refresh erweitern

Ein Thema von ConnorMcLeod · begonnen am 12. Dez 2015 · letzter Beitrag vom 13. Dez 2015
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: TDataSet.Refresh erweitern

  Alt 12. Dez 2015, 16:45
Leider kann/darf ich keinen Quellcode zeigen, das wäre auch etwas umständlich, aber das Prinzip geht so:

Delphi-Quellcode:
type
  // diese Klasse kann ich nicht verändern:
  TDataSetMitExtraFunktionalitaet = class(TDataSet)
  public
    procedure NichtAenderbar;
  end;

implementation

procedure TDataSetMitExtraFunktionalitaet.NichtAenderbar
begin
  // in dieser Prozedur kann ich nichts ändern
  [...]
  Refresh;
end;

procedure Demo;
var
  ds1: TDataSetMitExtraFunktionalitaet;
begin
  [...]
  // hier passiert ein implizierter Refresh, der unterdrückt werden soll:
  ds1.NichtAenderbar;
end;
Hoffe, das ist halbwegs verständlich
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: TDataSet.Refresh erweitern

  Alt 12. Dez 2015, 17:26
Prinzip ist verständlich, damit reicht der Quelltext (erstmal) aus:
Delphi-Quellcode:
type
  ERefreshError = Class(Exception);

type
  // diese Klasse kann ich nicht verändern:
  TDataSetMitExtraFunktionalitaet = class(TDataSet)
  public
    procedure NichtAenderbar;
  end;

implementation

procedure TDataSetMitExtraFunktionalitaet.NichtAenderbar
begin
  // in dieser Prozedur kann ich nichts ändern
  [...]
  Refresh;
end;

procedure EignesBeforeRefresh(DataSet: TDataSet);
begin
  if meineAbbruchBedingung then begin
    raise ERefreshError.Create('Refresh nicht zulässig.');
  end;
end;

// aber dashier ist änderbar?
procedure Demo;
var
  ds1: TDataSetMitExtraFunktionalitaet;
begin
  [...]
  // hier passiert ein implizierter Refresh, der unterdrückt werden soll:
  ds1.OnBeforeRefresh := EignesBeforeRefresh;
  Try
    ds1.NichtAenderbar;
  except
      // Das "Fressen" der Exception an dieser Stelle wirkt wie ein Exit in der RefreshMethode.
      // TDataSetMitExtraFunktionalitaet.Refresh wird nicht ausgerufen.
    on e: ERefreshError do;
  end;
  ds1.OnBeforeRefresh := Nil;
end;
Würde sowas helfen?

Natürlich scheitert das, wenn in der nichtänderbaren Routine sowas enthalten ist:
Delphi-Quellcode:
procedure TDataSetMitExtraFunktionalitaet.NichtAenderbar(DataSet: TDataSet);
begin
  [...]

  Refresh;

  [...] // Dashier würde dann nichtmehr ausgeführt.
         // Wenn das aber ausgeführt werden muss, dann kann man den Vorschlag vergessen.
end;
Ist denn der Quelltext von "NichtAenderbar" so, dass man eventuell auftretende Probleme erkennen kann und nach einer gezielten Lösung suchen kann?

Geändert von nahpets (12. Dez 2015 um 17:56 Uhr) Grund: Text ergänzt...
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TDataSet.Refresh erweitern

  Alt 12. Dez 2015, 17:43
Yo, sehr nette Idee! Ich werde noch sicherheitshalber ein mglw bereits zugewiesenes OnBeforeRefresh Event in eine Variable retten und danach wieder auswechseln. Das wär's dann.
Vielen Dank!
Nr.1 Delphi-Tool: [F7]
  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 17:18 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