AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit dpCollection, loadfromStream / assign
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit dpCollection, loadfromStream / assign

Ein Thema von JohannesK · begonnen am 16. Apr 2009 · letzter Beitrag vom 17. Apr 2009
 
JohannesK

Registriert seit: 17. Jul 2003
Ort: Abtwil
118 Beiträge
 
Delphi 2010 Professional
 
#1

Problem mit dpCollection, loadfromStream / assign

  Alt 16. Apr 2009, 16:06
Hallo, ich habe folgendes Problem bei der Verwendung der DpCollection:

savetostream funktioniert, bei loadfromstream kommt Fehlermeldung.

Die Klassen sind wir folgt definiert:
Delphi-Quellcode:
 type TChecklistItems = class(TCollection) // Definition Typ TChecklistItems -

   private // Beginn des privaten Bereichs
    bj, rw, knlevel: Integer;
    selected : boolean;
    icount : integer;
    parent : TComponent;
    iclass : TChecklistItem;
    tn : string;

    function liesParent: TComponent;
    procedure schreibParent(tx: TComponent);
    function liesListname: string;
    procedure schreibListname(tx: string);
    function LiesItemclass: TCollectionItemClass;
    function GetItem(w: integer): TChecklistItem;
    procedure SetItem(w: Integer; const Value: TChecklistItem);

   public // Beginn des öffentlichen Bereichs
    property Items[X : Integer] : TChecklistItem read GetItem write SetItem; default;
    constructor create;
    procedure SaveToStream(Stream: TStream);
    procedure LoadFromStream(Stream: TStream);
    property itemlistname: string read lieslistname write schreiblistname;
    property ItemClass : TCollectionItemClass read LiesItemclass;
    function add: TChecklistItem;
  end;

   TCheckListDummy = class(TComponent)
   private
     FItems : TChecklistItems;
   public
     constructor Create(AOwner : TComponent); override;
     destructor Destroy; override;
     procedure Assign(Source: TPersistent); override;
   published
     property Items : TChecklistItems read FItems write FItems;
   end;

  procedure TChecklistItem.Assign(Source: TPersistent);
    begin
      If Source is TChecklistItem then
        begin
          tn:=TChecklistItem(Source).itemname;
          // FNumbers.Assign(TChecklistItem(Source).Numbers);
      end
        else
        inherited Assign(Source);
  end;
  procedure TChecklistItems.SaveToStream(Stream: TStream);
  var
  CheckListDummy : TCheckListDummy;
  begin
    CheckListDummy:=TCheckListDummy.Create(Nil);
    Try
      CheckListDummy.Items.Assign(self);
      Stream.WriteComponent(CheckListDummy);
    Finally
      CheckListDummy.Free;
    end;
  end;

  procedure TChecklistItems.LoadFromStream(Stream: TStream);
  var
    CheckListDummy : TCheckListDummy;
  begin
    CheckListDummy := TCheckListDummy.Create(Nil);
    Try
      Stream.ReadComponent(CheckListDummy);
      Assign(CheckListDummy.items);
    Finally
      CheckListDummy.Free;
      end;
  end;
Der Stream wird in ein Blob-Feld geschrieben bzw. von dort ausgelesen.
Beim Versuch ein loadfromstream zu nutzen kommt eine EAccessViolation, der gleiche Vorgang für die einzelitems funktioniert ebenfalls ohne Probleme.
Die originale Version der dpCollection funktioniert einwandfrei.

Was habe ich übersehen ?
mit freundlichem Gruss

So einfach wie möglich. Aber nicht einfacher.
  Mit Zitat antworten Zitat
 


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 00:41 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