Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Exception beim SetLength für ein Array (https://www.delphipraxis.net/205347-exception-beim-setlength-fuer-ein-array.html)

himitsu 31. Aug 2020 14:11

AW: Exception beim SetLength für ein Array
 
Im RecordCount wird der DataSet.Filter beachtet, also passt die Anzahl.



Wenn die TConnectionListe vorher nicht erstellt wurde, dann existiert beim Aufruf von Methoden/Eigenschaften das zugehörige Objekt nicht,
also existiert auch das darin enthaltene Items nicht.

Da Items das Einzige ist, was in dem Objekt existiert, knallt es natürlich nur/erst beim Zugriff auf diese Eigenschaft.
Als Self würden nil oder ein ungültiger Zeiger erstmal problemlos an die Methode übergeben.



Das mit dem Objektlist ist einfach:
Du hast dir eine Klasse gebaut, die eine Liste (Array) enthält.
Man kann diese Liste/Array selbst behandeln, oder man erbt von einer Listen-Klasse und kann dann deren Methoden verwenden,
angefangen beim TObjectList.Add, wo intern der Speicher bereits mit einer Optimierung mehr reserviert, bzw. man kann auch manuell
Delphi-Quellcode:
List.Capacity:=DS.RecordCount
den Wert vorgeben, entsprechend deinem SetLength.

himitsu 31. Aug 2020 14:20

AW: Exception beim SetLength für ein Array
 
Zitat:

Zitat von haentschman (Beitrag 1472662)
Kann Lazarus Generics? :gruebel: ...dann
Delphi-Quellcode:
Items : TObjectList<TConnection>;

Ja, dort wurde schon vor 'ner Weile auch sowas gebaut.
Aber da es ja eine Eigentwicklung ist ... da ist das dann in FreePascal dann auch öfters auch bissl anders gelöst, bzw. man muß im passenden Modus kompilieren.
https://wiki.freepascal.org/Generics

Normale TList/TObjectList gegenüber generischer TList<T>/TObjectList<T>,
dort ist einfach, dass da der Typcast bereits eingebaut ist und das auch alles durch die Typprüfung des Compilers behandelt wird. (weniger potentielle Fehler)

Delphi-Quellcode:
TConnectionListe = class
  Items : Array of TConnection;
  ...
end;
 
TConnectionListe = class
  Items : TObjectList<TConnection>; // enthält eine Liste
  ...
end;
// ConnectionListe.Items.Add
 
TConnectionListe = class(TObjectList<TConnection>) // ist selbst die Liste
  ...
end;
// ConnectionListe.Add
Und natürlich im Destructor nicht vergessen die Items (die vielen TConnection) nicht vergessen freizugeben.
Die ObjectListe hat da den Vorteil das über OwnsObjects automatisch machen zu können.

Außerdem in TConnection.Destroy nicht vergessen das Image freizugeben.

nwnssolutionssoftware 31. Aug 2020 14:59

AW: Exception beim SetLength für ein Array
 
Wow perfekt danke für die vielen Informationen versuche das jetzt erstmal mir aus den ganzen Informationen eine Lösung zu erarbeiten.

Melde mich sobald ich Fortschritte erzielt habe...:thumb:

Danke nochmals:-D

nwnssolutionssoftware 31. Aug 2020 15:01

AW: Exception beim SetLength für ein Array
 
Muss ich das Thema irgendwie schließen oder reicht das wenn ich das mit der offenen Frage rausnehme?:oops::lol:

Poelser 31. Aug 2020 15:14

AW: Exception beim SetLength für ein Array
 
Die Lösung posten, damit man bei der Suche auch Jahre später nicht nur die Frage, sondern auch die Antwort findet...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Seite 2 von 2     12   

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