AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Exception beim SetLength für ein Array

Ein Thema von nwnssolutionssoftware · begonnen am 31. Aug 2020 · letzter Beitrag vom 31. Aug 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

AW: Exception beim SetLength für ein Array

  Alt 31. Aug 2020, 15:11
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 List.Capacity:=DS.RecordCount den Wert vorgeben, entsprechend deinem SetLength.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Exception beim SetLength für ein Array

  Alt 31. Aug 2020, 15:20
Kann Lazarus Generics? ...dann 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.
$2B or not $2B

Geändert von himitsu (31. Aug 2020 um 15:26 Uhr)
  Mit Zitat antworten Zitat
nwnssolutionssoftware

Registriert seit: 6. Aug 2018
45 Beiträge
 
#13

AW: Exception beim SetLength für ein Array

  Alt 31. Aug 2020, 15:59
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...

Danke nochmals
Holger
  Mit Zitat antworten Zitat
nwnssolutionssoftware

Registriert seit: 6. Aug 2018
45 Beiträge
 
#14

AW: Exception beim SetLength für ein Array

  Alt 31. Aug 2020, 16:01
Muss ich das Thema irgendwie schließen oder reicht das wenn ich das mit der offenen Frage rausnehme?
Holger
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Exception beim SetLength für ein Array

  Alt 31. Aug 2020, 16:14
Die Lösung posten, damit man bei der Suche auch Jahre später nicht nur die Frage, sondern auch die Antwort findet...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 22: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