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 dynamisch erzeugen (https://www.delphipraxis.net/32558-record-dynamisch-erzeugen.html)

Apollo13 25. Okt 2004 10:15


Record dynamisch erzeugen
 
hi,

nachdem in nun schon sehr lange hier im forum gesucht habe und trotzdem noch keine richtige antwort auf die frage gefunden habe muss ich jetz (noch-)mal fragen:

myRec=record
name: string;
id: integer;
end;

wie kann ich zur laufzeit nun den record so verändern das der an ende so strukturiert ist???

myRec=record
name: string;
id: integer;
neueID: integer; //neuer Eintrag
end;

kann mir dabei jemand helfen???

*fastverzweifelt* Apollo13

Dax 25. Okt 2004 10:18

Re: Record dynamisch erzeugen
 
Du könntest dir ein dynamisches Array aus einer Semi-Struktur zusammenstellen, in etwa so:
Delphi-Quellcode:
type
  TSemiRec = record
    Data: Pointer;
    DataType: TDataType;
  end;
Wobei DataType angibt, was genau Data^ enthält.

Du könntest aber auch Variant-Arrays benutzen..
Aber zu deiner anderen Frage: Die Möglichkeit der Änderung eines Typs zur Laufzeit besteht nicht.

Apollo13 25. Okt 2004 11:58

Re: Record dynamisch erzeugen
 
hm, ok...ich dachte mir das schon... da muss ich das irendwie anders lösen!!!

thx Apollo13

jim_raynor 25. Okt 2004 11:59

Re: Record dynamisch erzeugen
 
Spricht denn was dagegen, immer alle Felder im Record zu haben und nur bei bedarf zu füllen?

shmia 25. Okt 2004 13:11

Re: Record dynamisch erzeugen
 
Ein Alternative zum Record wäre ein Memory-Dataset; also eine Tabelle, die im Hauptspeicher liegt.
Damit kannst du zur Laufzeit Felder hinzufügen.
Ausserdem hast du nützliche Zusatzfunktionen wie z.B. Suchen mit Locate und Sortieren nach best. Feldern.
Ein Nachteil ist natürlich der Overhead, den ein Memory-Dataset mitbringt.
http://www.torry.net/pages.php?id=572
Empfehlenswert ist TkbmMem Table.
Bei sehr grossen Datenmengen kann obige Komponente sogar weniger Speicher benötigen
(wg. eingebauter Komprimierung) und wesentlicher schneller Datensätze finden als ein Array of Records.

Sharky 25. Okt 2004 13:59

Re: Record dynamisch erzeugen
 
Hai,

kleine Anmerkung: Beim Hersteller gibt es schon neuerer Versionen. Unteranderem auch für Delphi 7

choose 25. Okt 2004 14:03

Re: Record dynamisch erzeugen
 
Hallo Apollo13, Hallo shmia,

Zitat:

Zitat von shmia
[..] eine Tabelle, die im Hauptspeicher liegt [..]

..ist bei der von Apollo13 verwendeten Version von Delphi 5 (Enterprise) bereits in Form des Delphi-Referenz durchsuchenTClientDataSet vorhanden.

Apollo13 26. Okt 2004 06:24

Re: Record dynamisch erzeugen
 
danke für die antworten. direkt schon den record im speicher lassen und bei bedarf füllen ist nicht sinn und zweck der sache. ich habe das zwar auch schon überlegt, jedoch sind die verschiedenen tabellen sehr unterschiedlich und somit fällt diese variante auch weg. die idee mit dem memory-dataset finde ich dagegen sehr interessant da sie dem problem am ehesten entgegen kommt. ich werds damit mal probieren!!! großes dankeschön nochmal!!!

:-D Apollo13


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