AGB  ·  Datenschutz  ·  Impressum  







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

Session ist nicht definiert

Ein Thema von Walter Landwehr · begonnen am 2. Jan 2021 · letzter Beitrag vom 3. Jan 2021
Antwort Antwort
Seite 1 von 2  1 2      
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Session ist nicht definiert

  Alt 2. Jan 2021, 10:56
Hallo, ich habe ein großes Projekt von Delphi 10.1 nach Delphi 10.4.1 umgestellt. Soweit so gut. Beim verlassen der Anwendung erhalte ich die Meldung: EIB_Error ... Session ist nicht definiert. Das Programm läßt sich nicht beenden.

Was kann das sein?

Delphi-Quellcode:
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  timMain.Enabled := false;
  tmMedikament.Enabled := false;
  foriginalMenuStream.Free;
  dmMain.Threadbeenden;
  Action := caFree;
  TForm(Self) := nil;
end
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.825 Beiträge
 
Delphi 12 Athens
 
#2

AW: Session ist nicht definiert

  Alt 2. Jan 2021, 13:46
Hält der Debugger nicht irgendwo an?
Ansonsten im Destruktor mal der Reihe nach Sachen auskomentieren,
bis die Meldung nicht mehr kommt um rauszufinden woher die kommt?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Session ist nicht definiert

  Alt 2. Jan 2021, 14:30
EIB_Error hört sich nach Datenbank-Zugriffskomponenten an.

Wir hatten auch mal sporatische Probleme mit DB-Komponenten (hier beim Zugriff auf das globale Screen-Objekt, welche schon teileweise freigegeben war) beim beenden der Anwendung.

Wir haben den Code (bzw. neuen Code) in das OnCloseQuery des Hauptformulares verlagert und dort die Datenbankverbindung explizit geschlossen.
Damit kollidierten die DB-Aufräumarbeiten nicht mehr mit den Aufräumarbeiten der VCL.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#4

AW: Session ist nicht definiert

  Alt 2. Jan 2021, 14:41
Hallo, ich habe ein großes Projekt von Delphi 10.1 nach Delphi 10.4.1 umgestellt. Soweit so gut. Beim verlassen der Anwendung erhalte ich die Meldung: EIB_Error ... Session ist nicht definiert. Das Programm läßt sich nicht beenden.

Was kann das sein?

Delphi-Quellcode:
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  timMain.Enabled := false;
  tmMedikament.Enabled := false;
  foriginalMenuStream.Free;
  dmMain.Threadbeenden;
  Action := caFree;
  TForm(Self) := nil;
end
caFree heißt, dass das Formular freigegeben werden kann.

Bevor Dein Programm das tun kann, setzt Du das Formular aber schon auf NIL, was aber nicht einer Freigabe entspricht. Alles, was nach dieser Zuweisung noch irgendwie mit dem Formular interagieren muss, wird scheitern.

Bei meinem ollen Delphi 7 ist eine der letzten Aktionen beim Programmende if Application.MainForm = Self then Application.Terminate Wenn man nun vorher Self auf Nil setzt, dürfte das Beenden des Programmes scheitern, da ja Self inzwischen Nil ist und damit einen anderen Wert enthält, als Application.MainForm.

Sprich: Application.Terminate wird nicht aufgerufen und damit ist das von Dir beobachtete Verhalten
Zitat:
Das Programm läßt sich nicht beenden.
eine schlüssige Konsequenz. Weitere (negative) Nebenwirkungen sind nicht ausgeschlossen.

Oder anders formuliert:

Delphi kann beim Schließen des Hauptformulares (seit gefühlt Jahrzehnten) Programme sauber beenden. Man muss dort nicht (wie auch immer) eingreifen, was mit der Zuweisung TForm(Self) := nil; aber klar geschieht.

Aufgeräumt wird nur selbsterstelltes. Das Aufräumen der von Delphi automatisch erstellten Formulare ... sollte man beim Programmende Delphi überlassen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Session ist nicht definiert

  Alt 2. Jan 2021, 15:00
Bevor Dein Programm das tun kann, setzt Du das Formular aber schon auf NIL, was aber nicht einer Freigabe entspricht. Alles, was nach dieser Zuweisung noch irgendwie mit dem Formular interagieren muss, wird scheitern.
Nein, es wird nur Self auf nil gesetzt, also die lokale Referenz auf das Formular. Das hat genau gar keine Wirkung, da Self in der Methode danach gar nicht mehr verwendet wird.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Session ist nicht definiert

  Alt 2. Jan 2021, 15:42
Also habe jetzt alles ausprobiert. Es muss an dem Thread liegen den ich benutze. Dieser ist für den Google Kalender da.
Die Verbindung wird so getrennt.
Delphi-Quellcode:
procedure Tdata.DataModuleDestroy(Sender: TObject);
begin
  ncal.Free;
  con.Close;
  con.Connected := False;
end;
Um das Hauptformular habe ich FormClose so verändert.
Delphi-Quellcode:
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  timMain.Enabled := false;
  tmMedikament.Enabled := false;
  foriginalMenuStream.Free;
  dmMain.Threadbeenden;
  Action := caFree;
  TForm(Self) := nil;
  Application.Terminate;
  exit;
end;
Aber alle Versuche sind gescheitert. Der Debugger läuft bis zum Ende durch

Delphi-Quellcode:
begin
// IB_Session.IB_GetClientLibNameFunc := GetFBClientLibName;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TdmMain, dmMain);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Erst hier zum Schluss erscheint diese Meldung.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Session ist nicht definiert

  Alt 2. Jan 2021, 15:58
Und wie sieht der Stacktrace zu der Meldung aus?
Wie sieht die Routine Threadbeenden aus?

Und wo wird das Datenmodul freigegeben? Gar nicht selbst? Dann passiert der Fehler vielleicht dabei, weil das erst ganz am Ende passiert, wenn schon viel aufgeräumt ist.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Session ist nicht definiert

  Alt 3. Jan 2021, 10:50
Hier wird der Thread beendet:
Delphi-Quellcode:
procedure TdmMain.Threadbeenden;
var I : Integer;
begin
(* Calendersync *)
  if CalSyncThread = nil then Exit;
  if CalSyncThread.Worker <> nil then begin
    try
      CalSyncThread.Worker.stopped := true;
      CalSyncThread.Terminate;
    except;
    end;
  end;
  while Assigned(CalSyncThread) do begin
   Application.ProcessMessages;
   if FAbbrechen then Break;
  end;
end;
Ich bin ein bisschen weiter gekommen und weiß jetzt es liegt an IBObjects. Bin aber noch nicht dahintergekommen was die Meldung zu bedeuten hat. Werder mal den Support von IBObjects konsultieren.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Session ist nicht definiert

  Alt 3. Jan 2021, 12:18
Komme nicht weiter. Habe mal einen madexcept Fehlerbericht beigefügt. siehe Anlage
Angehängte Dateien
Dateityp: txt bugreport.txt (33,6 KB, 7x aufgerufen)
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Session ist nicht definiert

  Alt 3. Jan 2021, 13:20
Bei der Freigabe des Threads (im Destruktor) zerstörst du auch das Datenmodul dmData, führst dort aber bei der Zerstörung noch ein ExecSQL aus?

Das finde ich ein wenig spät. Wie wäre es, wenn du den Thread schon vor dem end des Projektquelltextes deinitialisierst?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:28 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