Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi record-Verwaltung mit Tlist (https://www.delphipraxis.net/136205-record-verwaltung-mit-tlist.html)

p80286 25. Jun 2009 16:03


record-Verwaltung mit Tlist
 
Hallo Zusammen,

Ich hätte gerne Eure Unterstützung für ein paar prinzipielle Fragen. Einen ähnlichen Thread hat es schon einmal gegeben (hier)

Abgesehen davon daß unsere Ansätze sich sehr ähneln, habe ich zwei Fragen bzw. Bitten:
1) Ich habe die "notwendigsten" Methoden zusammen gestellt, um eine Tlist mit Records ählich einer TStringlist zu gebrauchen. Wenn Ihr da einen groben Schnitzer entdecken solltet, dann wäre ich dankbar wenn Ihr mir den mitteilen könntet.

2) Ich würde diese "Unit" gerne als Vorlage für weitere Units/Klassen nutzen (ergänzt um Sortierung, Suchfunktionen etc.) aber sie sollte so aufgebaut sein, das ich nach Möglichkeit nur die Record-Definition ändere und sie ist dann einsatzbereit.

Hierfür habe ich ehrlich gesagt überhaupt keinen Plan wie ich das am geschicktesten (und effizentesten) umsetzen könnte.

Im Augenblick würde ich
kopieren
die Record-Definition ändern,
und die notwendigen Umbennungen durchführen.

Und dieses Vorgehen ist irgendwie nicht das gelbe vom Ei.

Delphi-Quellcode:
unit OAM_DocInfos;

interface

uses classes; {für tlist }

type
  t_DocInfo = record
                CODDOS:string[40];
                IDE___:string[20];
                CODPAY:string[2];
                DATDEP:string[10];
                NUMDEP:string[20];
                NUMPUB:string[10];
              end;

  pDocinfo = ^T_Docinfo;

  t_DocInfoListe = class(tlist)

  protected
    function Get(Index: Integer): t_DocInfo;
    procedure Put(Index: Integer; satz: t_DocInfo);
    function get4destroy(index: integer):pointer;
  public
    destructor Destroy; override;
    procedure ADD(satz:t_DocInfo);
    procedure DELETE(index:integer);
    property ITEMS[index:integer]:t_DocInfo read Get write Put;
 end;


implementation

destructor t_DocInfoListe.Destroy;
var
  i : integer;
begin
  for i:=0 to count-1 do
    dispose(get4destroy(i));
  inherited destroy;
end;

 procedure t_DocInfoListe.Delete(index:integer);
 begin
   dispose(get4destroy(index));
   inherited delete(index);
 end;

 procedure t_DocInfoListe.Add(satz:t_DocInfo);
 var
   newrec : pDocInfo;
 begin
   new(newrec);
   newrec^:=satz;
   inherited add(newrec);
 end;

 function t_DocInfoListe.get4destroy(index:integer):pointer;
 var
   p : pDocInfo;
 begin
   p:= inherited get(index);
   result:=p;
 end;

 function t_DocInfoListe.Get(index:integer):t_DocInfo;
 var
   p : pDocInfo;
 begin
   p:= inherited get(index);
   result:=p^;
 end;

 procedure t_DocInfoListe.Put(index:integer;satz:t_DocInfo);
 var
   p : pDocInfo;
 begin
   new(p);
   p^:=satz;
   inherited put(index,p);
 end;


end.
Könntet Ihr mir da auf die Sprünge helfen.
(Ach Ja: sollte unter Delphi 7 machbar sein)

Gruß
K-H

Klaus01 25. Jun 2009 16:53

Re: record-Verwaltung mit Tlist
 
.. was spricht gegen Objekte und TObjectList?

Objekte/Klassen kannst Du beliebig vererben/überschreiben.

Grüße
Klaus

Blup 26. Jun 2009 12:04

Re: record-Verwaltung mit Tlist
 
Records nach Möglichkeit als Referenz an Prozeduren/Funktionen übergeben.
Sonst wird unnötig eine Kopie auf dem Stapel erzeugt.
Delphi-Quellcode:
procedure Add(const satz: t_DocInfo); {oder}
procedure Add(satz: p_DocInfo);      {ist im Prinzip das gleiche}
Zur eigentlichen Frage, was du suchst sind Generics.

guidok 26. Jun 2009 12:34

Re: record-Verwaltung mit Tlist
 
Du kannst dir ja mal das anschauen (ja ist von mir). Das was du willst entspricht wohl den BusinessObjects. Wir der Name schon sagt handelt es sich dabei allerdings um Objekte und nicht um Records.

Gruß

p80286 26. Jun 2009 13:07

Re: record-Verwaltung mit Tlist
 
@Klaus01


Zitat:

Zitat von Klaus01
.. was spricht gegen Objekte und TObjectList?

Objekte/Klassen kannst Du beliebig vererben/überschreiben.

erst einmal spricht nichts dagegen, aber warum sollte ich eine tObjectList verwenden wenn eine TList reicht? Wenn ich das nicht mißverstanden habe existiert die Tlist genau für den Zweck, für den ich sie einsetzen will.
(Ersatz für eine doppelt verkettete Liste (pointer))

@Blup

Delphi-Quellcode:
procedure Add(const satz: t_DocInfo); {oder} 
procedure Add(satz: p_DocInfo);      {ist im Prinzip das gleiche}
Danke für den Hinweis. Die Übergabe mit p_Docinfo will ich vermeiden, da für viele Leute Pointer was ganz böses sind, wie man auch hier des öfteren liest. Das Arbeiten mit "const" ist für mich relativ neu und noch nicht in Fleisch und Blut übergegangen.

Die Generics gibt es wohl erst ab D2009, d.h. für mich gibt's sie erst einmal nicht

@Guidok
das liest sich interessant, scheint aber zunächst einmal (für meine Bedürfnisse) mit Kanonen auf Spatzen geschossen zu sein. Wenn ich darf schau ich es mir bei Gelegenheit genauer an und verwende es dann auch. Die Querverbindung zu XML scheint interessant zu sein.
(BusinessObjects hört sich so verdammt nach Marketing Geschwafel an)

Auf jeden Fall vielen Dank für die Hinweise.

K-H

guidok 29. Jun 2009 14:58

Re: record-Verwaltung mit Tlist
 
Zitat:

Zitat von p80286
@Guidok
das liest sich interessant, scheint aber zunächst einmal (für meine Bedürfnisse) mit Kanonen auf Spatzen geschossen zu sein. Wenn ich darf schau ich es mir bei Gelegenheit genauer an und verwende es dann auch. Die Querverbindung zu XML scheint interessant zu sein.
(BusinessObjects hört sich so verdammt nach Marketing Geschwafel an)

Du kannst das völlig frei verwenden, wenn du magst. Es soll auch nur ein Beispiel sein, wie sich so etwas realisieren lässt und ist mit Sicherheit nicht fehlerfrei! Für deinen Fall lohnt sich vielleicht ein Blick auf TCollectionItem und TCollection, darauf basiert auch mein kleines Framework.

"BusinessObject" ist übrigens nicht auf meinem Mist gewachsen. Ich habe mich da an die gängige Bezeichnung gehalten. Der Name rührt wohl daher, dass die Daten in diesem Objekt gehalten werden und auch die "Geschäftslogik" im Objekt selbst implementiert werden kann.

p80286 29. Jun 2009 15:52

Re: record-Verwaltung mit Tlist
 
Hallo zusammen,

nach dem Wochenende und etwas Lesen in der Hilfe, bin ich ein kleines Stückchen weiter.
Für meine Schmalspur-Zwecke scheint Tlist ausreichend. Aber falls wirklich einmal eine datenabhängige Verarbeitung erfolgen muß, ist Tcollection wohl die bessere Wahl.

vielen Dank für Eure Anregungen
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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