Hallo,
ich schreibe ein Programm in Tcl/Tk mit PgTcl, dass auf diverse
PostgreSQL Datenbanken zugreifen soll. Dabei habe ich
das Problem, dass ich nach einem Wechsel aus einer
geöffneten Datenbank in eine andere Datenbank
nach kurzer Zeit einen Speicherzugriffsfehler bekomme.
Den Wechsel der Datenbank habe ich wie folgt programmiert:
Der Benutzer bekommt alle bestehenden Datenbanken in
einer Listbox angezeigt. Mit einem Doppelklick auf eine
Datenbank soll die Verbindung zu der bereits geöffneten
Datenbank geschlossen werden und eine neue Verbindung
zur angeklickten Datenbank hergestellt werden.
Die Datenbanken frage ich wie folgt ab:
set res [pg_exec $db1 “SELECT datname FROM pg_database ORDER BY datname;”]
set ergebnis [pg_result $res -list]
pg_result $res -clear
…
Nach dem Doppelklick schließe ich zunächst die
geöffnete Datenbank:
bind .mandwechsel.l {
alte datenbank schließen
pg_disconnect $db1
neue datenbank ermitteln
set mtemp [selection get]
verbindung zur ausgewählten datenbank herstellen
set db1 [pg_connect -conninfo [list host = $servername port = $port user = $benutzer dbname = $mtemp password = $passwort]]
…
Die Verbindung zur neuen Datenbank wird hergestellt und ich
kann i.d.R. ein paar Abfragen durchführen. Nach kurzer Zeit
stürzt aber das Tcl/Tk Programm mit der Meldung “Speicherzugriffsfehler”
ab wenn ich eine SQL Abfrage abschicke. Die Fehlermeldung scheint
nicht vom Tcl Interpreter zu kommen sondern erscheint nur im
Terminalfenster. Ich vermute die Fehlermeldung kommt von PgTcl.
Was mache ich falsch?
OpenSUSE Leap 42.1
Tcl/Tk 8.6.1
PgTcl 1.7
PostgreSQL 9.2.7
Vielen Dank!