External: SIGSEGV bei Datenübergabe in eine Textbox

Für Fragen von Einsteigern und Programmieranfängern...

External: SIGSEGV bei Datenübergabe in eine Textbox

Beitragvon DOS » 7. Feb 2019, 22:21 External: SIGSEGV bei Datenübergabe in eine Textbox

Mich treiben die wagen Fehlermeldungen von Lazarus mal wieder in den Wahnsinn ^^

Also bei diesem Code:
Code: Alles auswählen
procedure loadDatei();
Var
  dOF : TextFile;
  eData : String;
begin
  AssignFile(dOF, Form1.kDatenb.datei);
  try
    Reset(dOF);
    ReadLn(dOF,eData);
    Form2.LiD.Text := 1;
    ReadLn(dOF,eData);
    Form2.CheckBox1.Checked := StrToBool(eData);
    ReadLn(dOF,eData);
    Form2.LiD1.Text := eData;
    ReadLn(dOF,eData);
    Form2.DateEdit1.Text:= eData;
    ReadLn(dOF,eData);
    Form2.LiD3.Text := eData;
    ReadLn(dOF,eData);
    Form2.ComboBox1.Text := eData;
    ReadLn(dOF,eData);
    Form2.LiD4.Text := eData;
    ReadLn(dOF,eData);
    Form2.LiD5.Text := eData;
    Repeat
     ReadLn(dOF,eData);
     Form2.Memo1.Lines.add(eData);
    until EOF(dOF);
    Close(dOF);
  finally
  end;
end;         


Diese Funktion löst folgenden Fehler aus:

Projekt Test hat Exception-Klasse »External: SIGSEGV« ausgelöst.

In Datei 'unit2.pas' in Zeile 87:
Form2.LiD.Text := eData;


Ich kann diese Zeile Auskommentieren, es kommt immer wieder dieser Fehler, selbst wenn ich die Variable gegen einen normalen String Text 'Test' austausche.

Wo ist da mein Fehler?

Verwende Lazarus 1.8.4 rUnversioned directory FPC 3.0.4 x86_64-linux-gtk2
DOS
 
Beiträge: 14
Registriert: 13. Dez 2017, 21:04
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Michl » 7. Feb 2019, 22:29 Re: External: SIGSEGV bei Datenübergabe in eine Textbox

Ins Blaue geraten existiert Form2 noch nicht (wurde noch nicht erstellt).

Teste mal, ob sie existiert:
Code: Alles auswählen
procedure loadDatei();
Var
  dOF : TextFile;
  eData : String;
begin
  if not Assigned(Form2) then begin
    ShowMessage('Form2 existiert nicht');
    Exit;
  end;
  AssignFile(dOF, Form1.kDatenb.datei);
  try
    Reset(dOF);
    ReadLn(dOF,eData);
    Form2.LiD.Text := 1;
    ReadLn(dOF,eData);
    Form2.CheckBox1.Checked := StrToBool(eData);
    ReadLn(dOF,eData);
    Form2.LiD1.Text := eData;
    ReadLn(dOF,eData);
    Form2.DateEdit1.Text:= eData;
    ReadLn(dOF,eData);
    Form2.LiD3.Text := eData;
    ReadLn(dOF,eData);
    Form2.ComboBox1.Text := eData;
    ReadLn(dOF,eData);
    Form2.LiD4.Text := eData;
    ReadLn(dOF,eData);
    Form2.LiD5.Text := eData;
    Repeat
     ReadLn(dOF,eData);
     Form2.Memo1.Lines.add(eData);
    until EOF(dOF);
    Close(dOF);
  finally
  end;
end;
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2325
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon DOS » 7. Feb 2019, 22:38 Re: External: SIGSEGV bei Datenübergabe in eine Textbox

Besten Dank, genau dies ist der Fehler.

Nun mein Problem,

Code: Alles auswählen
procedure TForm2.FormCreate(Sender: TObject);
begin
  { Soll ein neuer Eintrag angelegt werden? }
  If Form1.eIsNew Then
   Begin
    debugData('eID beim Laden von Form2 ' + IntToStr(Form1.eID));
    LiD.Text := IntToStr(Form1.eID);
    LiD1.Text := FormatDateTime('dd.mm.yyyy',now);
    DateEdit1.Text := FormatDateTime('dd.mm.yyyy',now + 1);
   end
  { Es soll ein bestehender Eintrag geöffnet werden }
  else
   Begin
    debugData('eID beim Laden von Form2 ' + Form1.kDatenb.id);
    LiD.Text := Form1.kDatenb.id;
    If Form1.kDatenb.aktiv = 1 Then Checkbox1.Checked := True Else Checkbox1.Checked:= false;
    loadDatei(){ Daten einlesen und übergeben }
   end;
  { Das soll immer ausgeführt werden }
  Combobox1.Items.Add('Kunde Rückruf');
  Combobox1.Items.Add('Reklamation');
  Combobox1.Items.Add('Bestellung');
  Combobox1.Items.Add('Kunde Informieren');
  end;         


Beim erstellen der Form, sollen die Daten geladen werden, kann ich dies nun nur mit einem Timer lösen? Den ich für recht unelegant halten würde oder welchen Weg könnte man mir da empfehlen?

Bin von Visual Basic auf Delphi umgesteiegn und da bin ich es gewohnt das erst die Form erstellt wird und dann main ausgeführt wird.

EDIT:

habs nun mit procedure TForm2.FormShow(Sender: TObject); gelöst.
DOS
 
Beiträge: 14
Registriert: 13. Dez 2017, 21:04
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon af0815 » 8. Feb 2019, 06:46 Re: External: SIGSEGV bei Datenübergabe in eine Textbox

Ich mache da init im OnFormActivate im Mainform und setze mir dann ein Flag, das esschon gemacht wurde. Somit wird das Init erst durchgeführt wenn alles erzeugt wurde. Damit kann ich auch super mit Splashscreens arbeiten, bei dem zB. Dem User der aktuelle Stand angezeigt wird. Normalerweise wird bei mir auch immer nur das Main automatisch erzeugt u d der Rest zur Laufzeit, damit hat man IMHO eine exzellente Kontrolle.

So querreferenzen von einem Form zur anderen würde ich über Parameter oder Properties lösen, damit werden Probleme mit hängenden Referenzen wie bei Dir soweit wie möglich vermieden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3789
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon DOS » 8. Feb 2019, 22:33 Re: External: SIGSEGV bei Datenübergabe in eine Textbox

af0815 hat geschrieben:So querreferenzen von einem Form zur anderen würde ich über Parameter oder Properties lösen, damit werden Probleme mit hängenden Referenzen wie bei Dir soweit wie möglich vermieden.


ok, danke für den Hinweis, wie genau meinst du das mit den Parametern und Properties?

Mfg. DOS
DOS
 
Beiträge: 14
Registriert: 13. Dez 2017, 21:04
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried