Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Beitrag 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
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Beitrag 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:

Code: Alles auswählen

oDocument.close(True)

Gruß

Robert
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Beitrag 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:

Code: Alles auswählen

oDocument.close(True)
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
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schließen einer DB-Verbindung bei LO 5.0.4 macht Probleme

Beitrag 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)
Antworten