Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FreePascal SIGSEGV / Stack-Overflow beim Öffnen einer TDBF (https://www.delphipraxis.net/206437-sigsegv-stack-overflow-beim-oeffnen-einer-tdbf.html)

ManniSt 21. Dez 2020 12:50

Datenbank: dBase • Version: IV • Zugriff über: TDBF

SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Nach dem Aufruf eines neuen Formulars und dem Öffnen einer DBF in diesem neuen Formular erscheint immer ein Fehler SISEGV in Lazarus und ein Stack-Overflow bei der Ausführung der Anwendung außerhalb von Lazarus.
Das Ganze läuft unter Win 10.

Identische Aufrufe von 2 anderen Formularen erzeugen keine Fehler.

Woran kann das liegen?
-------------------------------------------------------------------
Aufruf aus Formular TF_Menu:

procedure TF_Menu.Men_ModulesClick(Sender: TObject);

begin
MModulNr := Module.Fields.FieldByName('NR').Value;
Module.close;

F_Menu.Visible := false; // Aufrufende Form auf unsichtbar
F_Modules := TF_Modules.Create(Nil); // Neue Form wird erstellt
F_Modules.ShowModal; // Neue Form wird angezeigt
FreeAndNil(F_Modules); // Neue Form wieder freigeben
F_Menu.Visible := true;
// usw. …
end;

Neues Formular TF_Modules mit dem Fehler bei Module.Open:

procedure TF_Modules.FormCreate(Sender: TObject);

begin
Module.FilePathFull := Modules_Lw;
Module.ReadOnly := false;
Module.Open; // Hier entsteht der Fehler
Module.IndexName := 'NR';
end;

Delphi.Narium 21. Dez 2020 13:12

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Vermutlich fehlt irgendwo das passende
Delphi-Quellcode:
Module := TF_Modules.Create(Nil);

ManniSt 21. Dez 2020 13:17

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
TF_Modules wird initiert, wie im ersten Code-Beispiel zu sehen.
Module ist ein Dataset.

Klaus01 21. Dez 2020 13:26

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
F_Modules wird mit TF_Modules initiert.

modules wird in Deinem Beispiel nirgendwo initiert.

Grüße
Klaus

ManniSt 21. Dez 2020 13:31

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Seltsam, verstehe ich nicht: In den anderen beiden Fällen funktioniert das doch auch.

Wieso muss ein Dataset, das auf dem Formular definiert initiert werden? Gem. Dokumentation über TDbf wird ein Dataset mit TDataset.Open, auf aktiv gesetzt und kann verwendet werden, was ich auch schon mehrere Dutzend Male so gemacht habe.

Wenn Du das Formular meintest, es wird mit F_Modules := TF_Modules.Create(Nil);
initiert und mit F_Modules.ShowModal; angezeigt, genauso wie die anderen Dutzend Formulare.

Delphi.Narium 21. Dez 2020 14:15

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Der Fehler tritt aber bei Module und nicht bei F_Modules.

Sollte Module = F_Modules sein, so zeig' uns bitte den vollständigen Quelltext. Die Fragmente reichen nicht im leisesten Ansatz aus, um sinnvolle Rückschlüsse auf eine mögliche Fehlerursache ziehen zu können.

Lemmy 21. Dez 2020 14:37

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Module ist ein Dataset das auf F_Modules liegt

ist ein "Doppelpost"
https://www.lazarusforum.de/viewtopic.php?f=17&t=13312

ManniSt 21. Dez 2020 15:47

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Das ist interessant. Weise ich dem TDBF eine andere DBF zu, funktioniert es.
Ich habe auch die fragliche dbf umbenannt: Kein Erfolg
Ich habe die fragliche DBF verschoben und umbenannt: Kein Erfolg

jaenicke 21. Dez 2020 16:29

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Wie sieht denn der Stacktrace in dem Moment aus? Kannst du nicht schrittweise durch die Methode Open durchgehen und schauen wo es knallt?

Delphi.Narium 21. Dez 2020 16:47

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Zitat:

Zitat von ManniSt (Beitrag 1479634)
Das ist interessant. Weise ich dem TDBF eine andere DBF zu, funktioniert es.
Ich habe auch die fragliche dbf umbenannt: Kein Erfolg
Ich habe die fragliche DBF verschoben und umbenannt: Kein Erfolg

Dann tippe ich mal auf 'ne defekte DBF oder eine nicht DBF mit der Dateiendung DBF.

Die Dateiendung DBF besagt nicht zwingend, dass es sich um eine dbase-Datenbankdatei handelt.

Stimmt die Dateistruktur (annähernd) mit dem dort beschriebenen überein? https://www.dbf2002.com/dbf-file-format.html

ManniSt 21. Dez 2020 17:18

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Ja, es ist eine echte DBF, mit DBU aus Clipper-Zeiten erzeugt. Die DBF wird auch auf anderen
Formularen des Projektes ohne Probleme verwendet.

Das einzige, was mir jetzt noch einfällt wäre die dazugehörende .mdx.

Den Stack muss ich überprüfen, danke für den Hinweis!

jaenicke 21. Dez 2020 17:27

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Zitat:

Zitat von ManniSt (Beitrag 1479641)
Ja, es ist eine echte DBF, mit DBU aus Clipper-Zeiten erzeugt. Die DBF wird auch auf anderen
Formularen des Projektes ohne Probleme verwendet.

Kannst du das Formular einmal alleine in ein neues Projekt integrieren? Funktioniert es dann?

Hast du vielleicht irgendwo mehrdeutige Variablennamen oder so etwas? Ist Module in der Methode ungleich nil, wenn es verwendet wird?

ManniSt 22. Dez 2020 13:10

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Es war nicht eine defekte dbf. Ich habe die komplett neu erstellt und immer das Gleiche.

Habe jetzt das Formular noch einmal ganz von vorne und frisch erstellt und da geht es bis jetzt. Weiß der Henker, was das war.
:evil::wall:

dummzeuch 22. Dez 2020 14:41

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Zitat:

Zitat von ManniSt (Beitrag 1479682)
Habe jetzt das Formular noch einmal ganz von vorne und frisch erstellt und da geht es bis jetzt. Weiß der Henker, was das war.

Das schreit doch geradezu nach einem Vergleich mit dem vorherigen Formular. Vielleicht ergibt sich ja daraus die Ursache.

ManniSt 22. Dez 2020 14:47

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Da haste Recht!
Ich habe keine Nerven mehr dazu, deshalb noch mal neu und sauber.

Funktioniert bisher.

ManniSt 22. Dez 2020 20:56

AW: SIGSEGV / Stack-Overflow beim Öffnen einer TDBF
 
Es war nicht eine defekte dbf. Ich habe die komplett neu erstellt und immer das Gleiche.

Habe jetzt das Formular noch einmal ganz von vorne und frisch erstellt und da geht es bis jetzt. Weiß der Henker, was das war.
:( :evil: :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 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