AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Form close - EINvalidPointer

Ein Thema von Int3g3r · begonnen am 10. Apr 2019 · letzter Beitrag vom 10. Apr 2019
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.782 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 08:32
.. was passiert denn, wenn eine Mitarbeiter deaktiviert wird?
Entfernst Du dann das Frame aus der Liste - oder beendest Du das Frame nur?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 08:36
.. was passiert denn, wenn eine Mitarbeiter deaktiviert wird?
Entfernst Du dann das Frame aus der Liste - oder beendest Du das Frame nur?

Grüße
Klaus
Nein, ich werde die komplette TObjecList freigeben und neu aufbauen, somit auch alle Frames freigeben/neu erzeugen. Wenn ein Mitarbeiter deaktiviert wurde wird dieser bei der SQL abfrage nun nicht mehr in der Tabelle angezeigt. Anhand der anzahl der Tabelleneinträge werden mir die anzahl Frames erzeugt.

Code:
   qryMitarbeiter.Close;
   qryMitarbeiter.SQL.Text := 'select * from mitarbeiter where mitarbeiter.aktiv = 1';
   qryMitarbeiter.Open;

Geändert von Int3g3r (10. Apr 2019 um 08:43 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 09:16
Hallo,
Zitat:
ich werde die komplette TObjecList freigeben
werde = Zukunft
oder machst du das bereits?
Heiko

Geändert von hoika (10. Apr 2019 um 09:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#4

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 09:37
Moin...
Zitat:
Also das Ziel bei einer TObjectList ist doch das die Items automatisch freigegeben werden wenn der owner auf true ist.
Diese Aussage ist falsch.
Zum Verständnis...Entweder die Objektliste oder der Owner gibt den Frame frei.
Delphi-Quellcode:
// 1. Variante
FrmPerson := TFrmPerson.Create(nil); // Owner hier auf nil
PersonList := TObjectList<TfrmPerson>.Create(True); // bleibt

// 2. Variante
FrmPerson := TFrmPerson.Create(self); // Owner bleibt
PersonList := TObjectList<TfrmPerson>.Create(False); // heißt, daß die Liste ihre Objekte nicht selbst freigibt
Delphi-Quellcode:
PersonList := TObjectList<TfrmPerson>.Create(True);
PersonList.Free;
Erzeugen und freigeben der Liste bitte im FormCreate/FormDestroy. Da sind sie besser aufgehoben.

eine Bitte:
Keine globalen Variablen.
Delphi-Quellcode:
var
  PersonList : TObjectList<TfrmPerson>;
besser:
Delphi-Quellcode:
TfrmAnsicht = class(TForm)
private
 FPersonList : TObjectList<TfrmPerson>;

Geändert von haentschman (10. Apr 2019 um 09:47 Uhr)
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 10:05
Zitat:
Zum Verständnis...Entweder die Objektliste oder der Owner gibt den Frame frei.
Besten Dank für die Erklärung. Dies habe ich wohl falsch verstanden. Ich habe gedacht das der owner dann auf die TObjectList übertragen wird. Somit hatte ich 2 Owner.

Code:
// 1. Variante
FrmPerson := TFrmPerson.Create(nil); // Owner hier auf nil
PersonList := TObjectList<TfrmPerson>.Create(True); // bleibt
Habe ich nun wie in deinem beispiel getestet. Hat leider nichts gebracht der PointerFehler besteht weiterhin.

Im Frame habe ich noch Arrays[0..30] of Shortint; diese müssen ja nicht spezifisch freigegeben werden, richtig ?

Code:
TfrmAnsicht = class(TForm)
private
 FPersonList : TObjectList<TfrmPerson>;
Hmm... Ich möchte sehen welche Units ich Manuell eingebunden Habe.
Wenn ich dies wie in deinem Beispiel mache bin ich gezwungen die frame_Person in der ersten Uses einzutragen wo alle system units eingebunden werden.

Wenn ich diese global deklariere kann ich dies nach der Implementation machen und sehe somit auf anhib welche units ich eingebunden habe. Oder gibt es eine möglichkeit diese als private zu deklarieren nach der Implementation ?

Ah ja bevor ichs vergesse, Vielen Dank für die Hilfe!

Geändert von Int3g3r (10. Apr 2019 um 10:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#6

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 10:29
Zitat:
In deinem Fall mußt Du also unbedingt die TObjectlist löschen
...wieso? Ich verwalte einige der Forms in Objektlisten. (Owner = nil) Wenn man sich an die Regeln hällt, ist es kein Problem. Wichtig, die Liste im FormCreate/FormDestroy anlegen und zerstören.
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 13:29
Endlich !!

Habs herausgefunden!

Delphi-Quellcode:
   SetLength(MitarbeiterNamen, anzAktiveMitarbeiter-1);
   qryMitarbeiter.First;
   while not qryMitarbeiter.Eof do
      begin
         MitarbeiterNamen[i] := (qryMitarbeiterNAME.AsString + ' ' + qryMitarbeiterVORNAME.AsString);
         inc(i);
         qryMitarbeiter.Next;
      end;
Delphi-Quellcode:
 // KORREKT
SetLength(MitarbeiterNamen, anzAktiveMitarbeiter)
Kann mir jemand erklären warum ich hier keine exception bekommen habe ?
Er versucht einen String in den MitarbeiterNamen[i] einzutragen. Das Array war zu klein mit dem -1. Da hätte er doch motzen müssen wenn das Array zu klein ist und somit nicht über den index zugreifen kann.

Mfg Int3g3r

Geändert von Int3g3r (10. Apr 2019 um 13:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 13:34
Kann mir jemand erklären warum ich hier keine exception bekommen habe ?
Er versucht einen String in den MitarbeiterNamen[i] einzutragen. Das Array war zu klein mit dem -1. Da hätte er doch motzen müssen wenn das Array zu klein ist und somit nichts in den index eintragen kann.
Weil Speicher Speicher ist. Und solange der Speicher von Mitarbeiter[i] verfügbar und schreibbar ist, ist alles "okay".
Okay in der Hinsicht, dass man Daten darein schreiben kann. Das Problem ist nur, dass du damit wahrscheinlich Speicher eines andere Objekts o.ä. überschreibst weswegen die Chance besteht, dass du später ggf. "unerklärbare" Überraschungs-Exceptions bekommst an Stellen die eigentlich komplett unproblematisch sind, weil du dir vorher den Speicher zerschossen hast.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
718 Beiträge
 
Delphi 12 Athens
 
#9

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 13:56
Endlich !!

Habs herausgefunden!

Delphi-Quellcode:
   SetLength(MitarbeiterNamen, anzAktiveMitarbeiter-1);
   qryMitarbeiter.First;
   while not qryMitarbeiter.Eof do
      begin
         MitarbeiterNamen[i] := (qryMitarbeiterNAME.AsString + ' ' + qryMitarbeiterVORNAME.AsString);
         inc(i);
         qryMitarbeiter.Next;
      end;
Delphi-Quellcode:
 // KORREKT
SetLength(MitarbeiterNamen, anzAktiveMitarbeiter)
Kann mir jemand erklären warum ich hier keine exception bekommen habe ?
Er versucht einen String in den MitarbeiterNamen[i] einzutragen. Das Array war zu klein mit dem -1. Da hätte er doch motzen müssen wenn das Array zu klein ist und somit nicht über den index zugreifen kann.

Mfg Int3g3r
Hast Du range-checking aktiviert, zumindest für den Debug-Build?
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort

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 23:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz