Egal, ich hab's rausgefunden – eine der Funktionen hatte eine Eval()-Funktion, die genau beim Start des Skripts ausgewertet wurde.
Ich schreibe einen einfachen GUI-Prototyp:
Liste der Tabellen in einem Kombinationsfeld, Schaltfläche zum Hinzufügen/Öffnen einer Tabelle und Filterspaltenfeld mit den Spaltennamen der aktuell ausgewählten Tabelle.
Alles funktioniert auf Anhieb – Tabellen werden umgeschaltet, Spalten werden angezeigt, die Kombinationsbox reagiert auf das Hinzufügen, Schließen oder Umbenennen von Tabellen.
Ich verwende dafür ein Tabellenabonnement.
Nachdem ich das GUI-Fenster geschlossen und das Skript erneut gestartet habe, erhalte ich zufällige Fehler im Zusammenhang mit nicht definierten Symbolen (es wird eine neue Instanz ausgeführt). Es scheint, als würde beim Start Codefragmente der vorherigen Instanz an zufälligen Stellen ausgeführt, ohne dass die darin definierten Variablen gefunden werden.
Ich klicke im Fehlerfenster auf OK und führe das Skript erneut aus – es funktioniert nun normal.
Hier ist meine onClose-Funktion für das Fenster:
onWindowCloseExpr = Expr( Write("\!nRunning on window close expression"); For Each({_dt, _index}, (data:tablesListAA << Get Values), Close(_dt, NoSave); ); Unsubscribe to Data Table List( aSub ); Clear Symbols(); Stop(); );
Ich habe Clear Symbols() und Stop() hinzugefügt, um sicherzustellen, dass das Skript stoppt und alles gelöscht wird, während ich versuchte, das Problem zu beheben.
Hat jemand eine Ahnung, was da los ist und wie man das Problem beheben kann?