Seite 1 von 1
Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme
Verfasst: Mo, 06.03.2017 10:49
von Stephan
Hallo,
Ich greife auf eine nicht angemeldete DB-Datei wie folgt zu:
Code: Alles auswählen
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
sName = ConvertToURL("D:\Adressverwaltung.odb")
oDataSource = oBaseContext.getByName(sName)
oCon = oDataSource.getConnection("", "")
oStatement = oCon.createStatement()
xe = oStatement.executeQuery("Select ""Nachname"" , ""Vorname"" , ""Firmenname"" FROM ""Person"" ORDER BY ""Nachname"" ASC")
'...
oCon.close()
hierbei scheint das oCon.close() nicht zu 'wirken', denn es wird zwar keine Fehlermeldung ausgegeben, aber im Verzeichnis der DB wird die Datei "Adressverwaltung.odb.lck" nicht gelöscht und LO lässt sich deshalb später nicht schliessen, sondern blockiert bzw. hängt sich auf.
Das Problem ist augenscheinlich versionsabhängig denn es tritt hier nur bei LO 5.0.4 auf, auch ein Neuanlegen des Benutzerverzeichnisses bringt nichts.
Ich wäre dankbar für einen Hinweis wie man dem Problem begegnen kann oder eine explizite Bestätigung das das ein bekannter Fehler der Version LO 5.0.4 ist.
Gruß
Stephan
Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme
Verfasst: Mo, 06.03.2017 17:47
von RobertG
Hallo Stephan,
ob es da einen bestimmten LO 5.0-Bug gibt kann ich nicht sagen. Ich habe bisher auch lediglich in einem Makro einmal das Schließen einer Datenbank nach Nutzung versucht (Aufruf eines Berichtes von außerhalb der DB - Writer-Formular). Da habe ich allerdings nicht nur die Verbindung, sondern eben das ganze Dokument geschlossen:
Gruß
Robert
Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme
Verfasst: Mo, 06.03.2017 20:14
von Stephan
RobertG hat geschrieben: Mo, 06.03.2017 17:47
Da habe ich allerdings nicht nur die Verbindung, sondern eben das ganze Dokument geschlossen:
mmh, ich habe keinen direkten Zugriff auf das Dokument-Objekt(?)
Hinweis: ich habe die *.odb nicht direkt geöffnet, sondern mein Makrocode läuft aus einer odt-Datei heraus.
Gruß
Stephan
Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme
Verfasst: Di, 07.03.2017 09:42
von Toxitom
Hey Stephan,
das Problem dürfte schon die nicht geschlossene Verbindung sein.
Mit oCon.close() schliesst Du ja nur den aktiven Datenkanal zur Datenbank - nicht aber die Verbindung zum Dokument oder - wie Robert erwähnt hat - das Dokument selbst.
Nach meinem Gefühl müsstest Du den Service "oBaseContext" entsorgen - falls es nix anders gibt zur Not über "dispose()"?
Wahrscheinlich würde ich aber vorher die Datenquelle entsorgen - also, wenn es ein "getByName" gibt, wird es meist auch ein "removebyName" oder so geben. und dan erstg den Service "killen";)
Ne Versuch wäre es wert....
Viele Grüße
Tom
Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme
Verfasst: Di, 07.03.2017 20:07
von RobertG
Hallo Stephan,
hier der komplette Weg, wie ich ihn gehen würde:
Code: Alles auswählen
sURL = ConvertToURL("D:\Adressverwaltung.odb")
sURL = oForm.DataSourceName
oDocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg() )
oDocView = oDocument.CurrentController.Frame.ContainerWindow
oDocView.Visible = False
oDocument.getCurrentController().connect
...
Wait(100)
oDocument.close(True)
Das Wait dazwischen habe ich bei meiner Geschichte mit den Berichten eingebaut, das Erstellen des Berichtes nicht klappte.
Gruß
Robert
Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme
Verfasst: Mi, 08.03.2017 11:58
von Stephan
Danke @all, ich werde das Gesagte berücksichtigen.
Gruß
Stephan
Hinweis (falls jemand später nachliest) - das Makro muss lauten:
Code: Alles auswählen
sURL = ConvertToURL("D:\Adressverwaltung.odb")
oDocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Array() )
oDocView = oDocument.CurrentController.Frame.ContainerWindow
oDocView.Visible = False
oDocument.getCurrentController().connect
...
Wait(100)
oDocument.close(True)