AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Members von Objekten speichern

Ein Thema von Optiplex · begonnen am 30. Jul 2009 · letzter Beitrag vom 3. Aug 2009
Antwort Antwort
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#1

Members von Objekten speichern

  Alt 30. Jul 2009, 12:34
Hallo zusammen,
ich habe einige verschiedene Objekte von denen ich bestimmte Members abspeichern möchte (z.B. Status,Name usw.). Nun möcht ich von euch wissen wie man sowas am besten macht? Soll ich diese Eigenschaften in einer INI ,XML oder eine typisierte Datei verwenden. Was ist einfacher zu handhaben? Auf jeden Fall muss ich nach jeder Eingabe die bestimmten Eigenschaften des jeweilige Objekts abspeichern, weil diese Datei immer auf dem aktuellen Stand sein muss. Auch nach einem Stromausfall muss das Prg die Datei laden und an dem Punkt weiterarbeiten an dem es unterbrochen wurde.

Bin auf eure Vorschläge schon sehr gespannt.

Gruß Dieter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Members von Objekten speichern

  Alt 30. Jul 2009, 12:49
Wenn du diese Member als Puplished-Properties bereitstellst, dann könntest du z.B. die Serialisierungsfunktionen nutzen, welche öfters im Zusammenhang mit XML existieren.

Dann brauchst du nur der Funktion das Objekt übergeben und dieses ließt automatisch die Member/Property aus.
Ja und am Schluß nur noch speichern.

> Hier im Forum suchenSerialisierung XML
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Members von Objekten speichern

  Alt 31. Jul 2009, 09:16
Sorry himitsu,
dass ich mich erst heute wieder melde, hab mal versucht mich mit dieser Serialisierung zu beschäftigen, bin aber noch nicht ganz durchgestiegen. Was ich nicht möchte, ist dass alle Members die Property sind gespeichert werden, sondern nur ausgesuchte, ich habe aber bis jetzt keine Routine gefunden mit der ich das bewerkstelligen könnte. Bin aber auch nicht der XML Spezialist.

Was mich etwas wundert ist, dass nur von dir einen Vorschlag bekommen habe.

Gruß Dieter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Members von Objekten speichern

  Alt 31. Jul 2009, 09:38
Du kannst ja den Properties unterschiedliche Sichtbarkeiten verpassen
Private, Protected, Puplic und Publisched ... dabei werden meißtens nur Puplished-Properties gespeichert.

Unter Umständen könnte man auch noch die Puplic-Properties auslesen, aber von den Restlichen gibt es keine Liste in der RTTI .... standardmäßig existiert soeine Liste nur von den Puplisheds, welche von der Sichtbarkeit ähnlich wie Puplic sind und im Grunde auch Speicherung vorgesehn wurden.

PS: Bei der VCL werden in der .DFM auch nur die Puplished-Properties gespeichert und im OI angezeigt.

Zitat von Optiplex:
Was ich nicht möchte, ist dass alle Members die Property sind gespeichert werden, sondern nur ausgesuchte, ich habe aber bis jetzt keine Routine gefunden mit der ich das bewerkstelligen könnte.
Zitat von Optiplex:
Bin aber auch nicht der XML Spezialist.
Bin ich auch nicht und hab erst vor kurzem damit angefangen.

Bei meinem himXML würde das Speichern so gehn
Delphi-Quellcode:
XML := TXMLFile.Create;
Try
  Node := XML.AddNode('object');
  Node.Serialize(Form1);
  XML.SaveToFile(...);
Finally
  XML.Free;
End;
Nur muß ich endlich mal Zeit und eine zündende Idee finden, um die Deserialisierung fertigzustellen.
Aktuell geht nur Speichern und das Laden nicht immer richtig

Aber zu Hier im Forum suchenXML und Serialisierung finden sich in der DP auch Beispiele für andere XML-Libs.

Oder man steigt auf Binärdateien um und nutzt die Objekt-Serialisierung, welche auch die VCL nutzt.
dafür muß man seine Klasse aber erstmal von TComponent ableiten und kann dann z.B. TFileStream.WriteComponent verwenden. (oh man, hab ich mich grad fast totgesucht ... ist schlimm, wenn man glaubt was zu kennen, aber nicht weiß wo es sich versteckt ... hatte erst eine SaveTo...-Funktion in TComponent gesucht )

Zitat von Optiplex:
Was mich etwas wundert ist, dass nur von dir einen Vorschlag bekommen habe.
sind Ferien = kaum wer da
und das mit der Serialisierung ist nunmal die Mitunder einfachste Variante, da wollte es wohl keiner doppelt erwähnen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Members von Objekten speichern

  Alt 31. Jul 2009, 12:26
Hallo Optiplex,

steht die Anzahl der Komponenten und Eigenschaften fest oder variieren diese?

Am einfachsten würde ich eine Ini ansehen.
Da kannst Du ja problemlos
Ini.WriteInteger(...Component1.Top...)
Ini.WriteInteger(...Component2.Left...)
speichern und später wieder herstellen.

Problematischer wird es, wenn Du vorher nicht sagen kannst, wie viele und welche Objekte gespeichert und später wieder gelden (vielleicht sogar erzeugt) werden müssen.

Für eine einfache Auslagerung einiger Eigenschaften würde ich einfach eine Ini nehmen und das von Hand veranlassen...

Stahli
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Members von Objekten speichern

  Alt 31. Jul 2009, 12:42
Ok himitsu,
ich werde mich mal durch die ganzen Artikel, in der DP durcharbeiten vielleicht finde ich doch noch eine XML-Libery die mir das speichern und laden vereinfacht.

Danke für deine schnelle Antwort

Hallo Stahli
Nein die Anzahl der Objekte steht nicht fest, sie können sich stehtig verändern. Welche Objekte gespeichert werden steht allerdings fest. Deshalb wollte eigentlich dieses mal keine INI verwenden, da ich ständig die Sektionen neu erstellen müsste.
Ich bräuchte dafür eine wesendlich bessere INI-Lib als die von Delphi. Vielleicht weißt du eine?

Gruß
Dieter
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Members von Objekten speichern

  Alt 31. Jul 2009, 13:14
Ich habe mein letztes Projekt so aufgebaut und eine erweitere Ini dafür genutzt.
Die ermöglicht das Speichern und Wiederherstellen von kompletten Komponenten und auch von Beziehungen dieser Komponenten untereinander.

Im Grunde macht sie so etwas ähnliches wie die Delphi-IDE, allerdings basieren die Wiederherstellungen der Verbindungen untereinander nicht auf dem Komponentennamen.

Wenn es Dich interessiert, kannst Du mal hier und hier nachlesen.

Das hat ganz gut funktioniert, auch wenn ich mich inzwischen aus anderen Gründen für eine neue Lösung mit Datenbankanbindung entschieden habe.

Die zu speichernden Komponenten müssen aber einige Voraussetzungen erfüllen, damit sie in der TExtIniFile gespeichert und geladen werden können.

Heute Abend kann ich die Quellen gern schicken, vielleicht findest Du darin ja zumindest ein paar Anregungen...


Stahli
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Members von Objekten speichern

  Alt 31. Jul 2009, 13:31
Vorsicht mit Serialisierung von Objekten!

Ändert sich eine Klasse grundsätzlich und man lädt eine Datei, die die serialisierten Daten noch in der alten Form vorweisen, wird man nicht glücklich werden.

Ich mach so etwas gerne in eigenen Dateien.

- eigener Header zur Erkennung der Datei
- eigenes Format für alle Daten


Wenn sich mal was ändert, hab ich so kein Problem mit, da ich im Header immer die Versionsnummer speichere und auf diese prüfe. Ich unterstütze in meinen Projekten immer alle Versionen meiner Dateien.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Members von Objekten speichern

  Alt 3. Aug 2009, 12:53
Sorry dass ich mich erst heute wieder melde.

@Tyrael Y.
Aus deinen Ausführungen entnehme ich, dass du mit Dateien mit einer eigenen Strucktur arbeitest. Das hat natürlich seine Vorteile. Ist allerdings auch sehr aufwendig. Das wäre die Lösung für mich wenn alles andere versagt.

Das mit der Serialisierung von Objekten habe ich probiert bin aber auf keine grünen Zweig gekommen, hat einfach nicht so geklappt wie ich mir das Vorstelle.

@stahli
Danke Stahli für die beiden Links, werde Sie mir heute noch genauer anschauen.
Ich glaube, dass eine erweiterte IniFiles genau das richtige wäre. Gibt es denn keine Ini-Unit mit mehr Möglichkeiten z.B. Umbenennen von Abschnitten usw.

Gruß Dieter
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Members von Objekten speichern

  Alt 3. Aug 2009, 13:27
Hier nochmal eine eine Überlegung zu meinem aktuellen Projekt.

Eine erweiterte Ini (außer meine, die aber recht kompliziert zu nutzen ist) kenne ich sonst nicht...

Stahli
  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 15:33 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