ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Silas
Beiträge: 2
Registriert: So 19. Mai 2024, 11:22

ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von Silas »

Moin,
ich habe folgendes Problem und bisher keine Lösung finden können. Ich möchte die Daten einer Maßnahme in einer Stringlist abspeichern und bei Abfrage der Kartei in einer Listbox anzeigen lassen. Man soll einfach einen Überblick über die zeitlichen Abstände erhalten, also eigentlich nichts wildes. Dies funktioniert auch soweit ohne Probleme.

Erstellen der Kartei: Kartei(..., TStringlist.create, ...)
Eintrag hinzufügen: Array[].Stringlist.Add(String)

Mein Problem taucht erst auf, wenn ich das Programm schließe (die Daten werden abgespeichert) und beim Programmneustart bekomme ich die ACCESS VIOLATION sobald ich irgendwas versuche mit der Stringlist zu machen. Sobald ich eine neue Stringlist erstelle und diese der Kartei zuweise hab ich keine Probleme, aber das ist ja nicht der Sinn der Sache. Ich komme nicht einmal an die gespeicherte Stringlist heran um sie auf einer neu erstellten zu kopieren und bearbeiten.

Vielen Dank schonmal für eure Hilfe.

(Ich hab die Grundmechaniken mal in der Oberstufe gelernt und helfe mir bei Problemen meist mit Google und dem Trial and Error Prinzip. Mein Wissen ist dementsprechend begrenzt)

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von theo »

Ich glaube, ohne den Code zu sehen, kann man dazu nicht viel sagen.

wennerer
Beiträge: 607
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von wennerer »

Hallo Silas,
ich weiß auch nicht so richtig wo dein Problem genau liegt, deshalb hoffe ich das ich nicht ganz daneben lieg. Jedenfalls hab ich mal schnell was zusammen geklickt von dem ich hoffe das es dir hilft.
Kannst es ja mal an schauen.
strlist.png
strlist.png (20.17 KiB) 2529 mal betrachtet
Viele Grüße
Bernd
Dateianhänge
project1.zip
(140.09 KiB) 31-mal heruntergeladen

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von MmVisual »

Du kannst beim Start jede Zeile im Denugger anschauen und kontrollieren ob alle Objekte auch wirklich mit Create erzeugt wurden bevor du diese benutzt.

Wenn während dem Debuggen ein Fehler auftritt kann man in Lazarus im Menü:
Ansicht > Debuggfenster > Aufrufstack
herausfinden welche Funktionen nacheinander aufgerufen wurden.

Debugge so dein Projekt mal komplett durch und du wird die genaue Zeile mit dem Fehler finden und musst dir dann überlegen wie du den Code änderst damit der Fehler weg ist.
EleLa - Elektronik Lagerverwaltung - www.elela.de

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von charlytango »

theo hat geschrieben: So 19. Mai 2024, 12:15 Ich glaube, ohne den Code zu sehen, kann man dazu nicht viel sagen.
Damit ist übrigens ein idealerweise lauffähiges Minimalbeispiel gemeint welches das Problem beinhaltet.
Oft hilft es übrigens, so ein Minimalbeispiel zu erstellen um selbst zu erkennen wo die Ursache liegt.

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von Warf »

Wie bereits gesagt kann man ohne Code nur raten, aber kanns sein das du records erstellst die eine StringList enthalten und die records dann in ne Datei schreibst?

Das wird nicht funktionieren weil du damit nicht die StringListen in die Datei schreibst, sondern nur den Pointer, der nur in diesem Programdurchlauf valide ist. Was du tun musst ist deine Daten zu Serialisieren: https://de.wikipedia.org/wiki/Serialisierung

Silas
Beiträge: 2
Registriert: So 19. Mai 2024, 11:22

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von Silas »

Moin, ja genau so ist es. Wenn das Programm geschlossen wird, speichert er das array of records in einer Datei (.dat) indem er einfach in einer Schleife write(File, Array) ausführt, so oft wie records im array vorhanden sind. Das mit dem Serialisieren habe ich mir angesehen, bin da aber noch nicht durchgestiegen, bzw. habe noch nicht herausgefunden wie das geht und was ich dafür machen muss.

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von wp_xyz »

Silas hat geschrieben: Do 23. Mai 2024, 14:23 Moin, ja genau so ist es. Wenn das Programm geschlossen wird, speichert er das array of records in einer Datei (.dat) indem er einfach in einer Schleife write(File, Array[ i ]) ausführt, so oft wie records im array vorhanden sind. Das mit dem Serialisieren habe ich mir angesehen, bin da aber noch nicht durchgestiegen, bzw. habe noch nicht herausgefunden wie das geht und was ich dafür machen muss.
Sorry, von was redest du? Oben war es eine StringList, und jetzt ist es ein Array of Records? Wie sind denn diese Records aufgebaut? Und wie ist der Code mit dem du die Records speicherst und zurückliest?

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ACCES VIOLATION einer Stringlist im Record nach dem Laden der Datei

Beitrag von charlytango »

womit wir wieder beim Code-Beispiel sind

Antworten