AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Bei TList, Record auf Datenänderung reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bei TList, Record auf Datenänderung reagieren

Ein Thema von RWarnecke · begonnen am 27. Dez 2009 · letzter Beitrag vom 26. Jan 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 11:07
Hallo zusammen,

ich habe diesen Teil des Tutorial durchgelesen und auch gleich umgesetzt. Dabei habe ich folgende Deklaration :
Delphi-Quellcode:
type
  PGesellschaftsname = ^TGesellschaftsname;
  TGesellschaftsname = record
    StammNr : Integer;
    Gesellschaftername : string;
    Zeichnungskapital : Double;
    ZweiteZahlung : TDateTime;
    ZahlenderBetrag : Double;
  end;

var
  Gesellschafter : PGesellschaftsname;
  GesellschafterListe : TList;
Das funktioniert alles soweit nach dem Tutorial. Nun stelle ich mir die Frage, wie kann ich jetzt auf Änderung in den Daten reagieren um diese Änderung dann in eine Datenbank zu schreiben ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#2

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 11:22
Moin Moin Rolf,
ich denke, ich habe diese Anforderung auch schon mal gehabt.Hier wurde mir geholfen
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 11:29
Moin Moin Ralph,

danke erstmal für Deine Antwort. Nur verstehe ich noch nicht ganz wie mir das Beispiel weiterhelfen soll, da ich kein Grid habe, sondern nur verstreute Werte in der Anwendung. Diese verstreuten Werte sind lediglich nur in Editfeldern oder ListViews untergebracht.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 11:35
Hi,

wie wär's, wenn Du statt des Records eine Class mit Properties und Gettern und Settern verwendest, und dann ein OnChange Event implementierst ?

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 11:37
Zitat von thkerkmann:
Hi,

wie wär's, wenn Du statt des Records eine Class mit Properties und Gettern und Settern verwendest, und dann ein OnChange Event implementierst ?

Gruss
Hä und wie macht man das ? Hast Du dazu auch ein Tutorial ? Weil ich habe das bis jetzt noch nicht so bewusst gemacht.

Edit: Ok, jetzt weiß ich was Du meinst. Ich habe dabei nur ein Problem, wie verbinde ich eine Klasse mit TList, da ich durch die TList ja auch mehrere Werte speichern kann. Bei einer Klasse kann ich das ja so ohne weitere ja nicht oder ? Und dann kommt das zweite Problem, ich habe noch nie ein OnChange Event geschrieben.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 11:57
Zitat von thkerkmann:
wie wär's, wenn Du statt des Records eine Class mit Properties und Gettern und Settern verwendest, und dann ein OnChange Event implementierst ?
Man benötigt erstmal einen Einstiegspunkt, wo man auf eine Änderung reagieren kann.

Bei Records wird im Allgemeinen nur DIREKT der wert geändert und es gibt keine Möglichkeit über eine Änderung informiert zu werden (außer wenn den Speicherbereich sperrt, wo man sich bei Zugriff eine Systemexception auslösen lassen kann, welche man dann passend behandelt ... ist aber nicht grad optimal).

Alternativ kann man seit Delphi 2006 / TDE auch Records mit Properties versehen und hätte so dann den nötigen Einstiegspunkt, um sowas wie OnChange zu implementieren.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 12:01
Hi,

Das geht dann (fast) genauso, wie mit deinem Record. Du erstellst doch mehrere Records (z.B. mit Getmem) und fügst sie der Liste hinzu.
Erstelle stattdessen mehrere Instanzen der Klasse und füge sie der Liste hinzu.

Delphi-Quellcode:
type
  tMyClass = class
  private
    FWert: integer;
    FOnChange: tNotifyEvent;
    procedure SetWert(Value:integer);
    function GetWert:integer;
  public
    property Wert: integer read GetWert write SetWert;
    property OnChange: tNotifyEvent read FOnChange write FOnChange;
  end;


procedure tMyClass.SetWert(Value:integer);
begin
  FWert := Value;
  if Assigned(FonChange) then
    FOnChange(Self);
end;

function tMyClass.GetWert:integer;
begin
  result := FWert;
end;

...

  aClass := tMyClass.Create;
  aClass.OnChange := WertAenderung;
  aList.Add(aClass);
...


procedure tMyForm.WertAenderung(Sender:tObject);
begin
  showmessage('aha es hat sich was geändert');
end;
und wenn es zum Aufräumen kommt, nicht vergessen die Objekte der Liste freizugeben. Nur nicht mit FreeMem, sondern mit Free.

P.S.
Jetzt kommen gleich wieder die Einwände eine TOjectList zu nehmen, weil man das dann der Liste überlassen kann, aber es geht hier um das Verständnis und nicht um die Eleganz.
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 12:10
Hallo Thomas,

danke erstmal für Deine ausführliche Antwort. Ich werde mir jetzt mal Dein Beispiel zu gemüte führen und ausprobieren.

Zitat von thkerkmann:
... aber es geht hier um das Verständnis und nicht um die Eleganz.
Genau darum geht es.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#9

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 16:06
Hallo Rolf,
naeher betrachtet geht es in dem Link ja um eine TList, dass Daten fuer ein Grid gespeichert werden ist eigentlich nebensaechlich. Um ueber Aenderungen informiert zu werden, wird fuer TList ein OnChange-Event implementiert. Aber es gibt ja nun schon einige andere Hinweise, die den gleichen / einen aehnlichen Weg aufzeigen.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 27. Dez 2009, 17:00
Ich habe das ganze jetzt mal umgebaut und ausprobiert nach dem Vorschlag von Thomas. Das mit dem Eintrag der Daten funktioniert so weit. Meine Deklaration sieht jetzt so aus :
Delphi-Quellcode:
type
  TGesellschaftsname = class
  private
    FOnChange : TNotifyEvent;
    FStammNr : Integer;
    FGesellschaftername : string;
    FZeichnungskapital : Double;
    FZweiteZahlung : TDateTime;
    FZahlenderBetrag : Double;
    procedure SetStammNr(Value: Integer);
    procedure SetGesellschaftername(Value: String);
    procedure SetZeichnungskapital(Value: Double);
    procedure SetZweiteZahlung(Value: TDateTime);
    procedure SetZahlenderBetrag(Value: Double);
    function GetStammNr:Integer;
    function GetGesellschaftername:String;
    function GetZeichnungskapital:Double;
    function GetZweiteZahlung:TDateTime;
    function GetZahlenderBetrag:Double;
  public
    property StammNr : Integer read GetStammNr write SetStammNr;
    property Gesellschaftername : string read GetGesellschaftername write SetGesellschaftername;
    property Zeichnungskapital : Double read GetZeichnungskapital write SetZeichnungskapital;
    property ZweiteZahlung : TDateTime read GetZweiteZahlung write SetZweiteZahlung;
    property ZahlenderBetrag : Double read GetZahlenderBetrag write SetZahlenderBetrag;
    property OnChange : TNotifyEvent read FOnChange write FOnChange;
  end;

var
  Gesellschafter : TGesellschaftsname;
  GesellschafterListe : TList;
Nur kapiere ich das irgendwie mit dem Pointern noch nicht. Wie kann ich jetzt einen Wert aus der Klasse TGesellschaftsname auslesen ? Ich habe das vorher mit dem Record so gemacht :TGesellschaftsname(GesellschafterListe[LV_Gesellschaftsform.Selected.Index]^).Gesellschaftsname Nur mit der Klasse bekomme ich jetzt eine EAccessViolation. Wen ich jetzt hinten das Zeichen ^ weglasse passiert garnichts. Genauso mit dieser Zeile :TGesellschaftsname(GesellschafterListe.Items[LV_Gesellschaftsform.Selected.Index]).Gesellschaftername Was mache ich hier falsch ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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:35 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