BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Fehler beim Aufruf eines Berichts über externes Formular

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Swordfish76
Beiträge: 19
Registriert: Di 11. Jul 2017, 20:32

Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von Swordfish76 » Do 27. Jul 2017, 16:06

Hallo zusammen,

ich wollte über folgendes Makro aus einem externen Formular einen Bericht aus meiner Datenbank öffnen (die xxx sind ein Teil des Pfades):

DIM oDatabaseContext AS OBJECT
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
SUB Einfamilienhaeuser_tab_oeffnen
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatasource = oDatabaseContext.getByName("https://start.xxxxxxxxxxxxx:15600/useca ... altung.odb")
oConnection = oDatasource.GetConnection("","")

ThisDatabaseDocument.ReportDocuments.getByName( "alle_Einfamilienhäuser_tab" ).open
END SUB


Dabei bekomme ich aber die Fehlermeldung:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten.
Type: com.sun.uno.RuntimeException
Message: unsatisfied query for interface of type com.sun.star.embed.XStorage!


Wobei ich dazu sagen muß, dass ich den Code aus dem Handbuch "Makros" kopiert habe und den Pfad + Dateiname und den Aufruf des Berichts ergänzt habe.

Hat jemand eine Idee, wie ich den Fehler beheben kann?

Bin für jeden Vorschlag dankbar! :-)

Gruß,
swordfish76

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von RobertG » Do 27. Jul 2017, 16:46

Hallo swordfish,

mir ist unklar, an welcher Stelle denn der Zugriff auf die Datenbankdatei erfolgt, die ich zuerst öffnen würde, um dann an den Bericht zu kommen.

Im Handbuch habe ich das anders gelöst:

Code: Alles auswählen

SUB Berichtsstart(oEvent AS OBJECT)
DIM oFeld AS OBJECT
DIM oForm AS OBJECT
DIM oDocument AS OBJECT
DIM oDocView AS OBJECT
DIM Arg()
oFeld = oEvent.Source.Model
oForm = oFeld.Parent
sURL = oForm.DataSourceName
oDocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg() )
oDocView = oDocument.CurrentController.Frame.ContainerWindow
oDocView.Visible = False
oDocument.getCurrentController().connect
Wait(100)
oDocument.ReportDocuments.getByName("alle_Einfamilienhäuser_tab").open
oDocument.close(True)
END SUB
Das Ganze wird über einen Button des externen Formular ausgelöst. Aus dem externen Formular wird die Datenbankverbindung ermittelt. Die Datenbankdatei wird geöffnet und unsichtbar geschaltet. Anschließend wird der Bericht geöffnet und danach die Datenbankdatei wieder geschlossen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Swordfish76
Beiträge: 19
Registriert: Di 11. Jul 2017, 20:32

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von Swordfish76 » Fr 28. Jul 2017, 09:11

Hallo Robert,

danke für die schnelle Antwort. Die Version habe ich auch schon versucht, allerdings erhalte ich auch hier folgenden Fehler:

SUB Berichtsstart(oEvent AS OBJECT)
DIM oFeld AS OBJECT
DIM oForm AS OBJECT
DIM oDocument AS OBJECT
DIM oDocView AS OBJECT
DIM Arg()

oFeld = oEvent.Source.Model

oForm = oFeld.Parent
sURL = oForm.DataSourceName
oDocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg() )
oDocView = oDocument.CurrentController.Frame.ContainerWindow
oDocView.Visible = False
oDocument.getCurrentController().connect
Wait(100)
oDocument.ReportDocuments.getByName("alle_Einfamilienhäuser_tab").open
oDocument.close(True)
END SUB

Fehlermeldung:
BASIC-Laufzeitfehler
Argument nicht optional
--> die "fette" Zeile im Code ist dann markiert.

ich müsste doch aber dem Code auch den Dateinamen "interessentenverwaltung.odb" mitteilen, oder?

Gruß,
Thorsten

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von RobertG » Fr 28. Jul 2017, 16:23

Hallo Thorsten,

das Makro muss an einen Button in dem Formular gebunden werden (Schaltfläche > Ereignisse > Aktion ausführen). Wenn der Button in dem Formular liegt, dann ist "Aktion ausführen" das Ereignis(Event), der Button ist Source, das Model ist enthält die meisten wichtigen Eigenschaften des Buttons.

Wie löst Du denn das Makro bisher aus?

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Swordfish76
Beiträge: 19
Registriert: Di 11. Jul 2017, 20:32

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von Swordfish76 » Mo 31. Jul 2017, 10:42

Hallo Robert,

die Makros löse ich natürlich auch über einen Button aus. :-)

Allerdings bisher nur innerhalb der Datenbank.

Da ich diese aber nicht alleine bedienen werde, soll es für den Anwender so angenehm wie möglich sein, daher
die Auslagerung der Formulare.

Sagt dir die Fehlermeldung vielleicht was? Habe einige Jahre nicht mehr mit Makros gearbeitet und fuchse mich
da wieder so langsam rein...

Danke!

Gruß,
Thorsten

Swordfish76
Beiträge: 19
Registriert: Di 11. Jul 2017, 20:32

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von Swordfish76 » Mo 18. Sep 2017, 15:02

Hallo zusammen,

nach viel Probiererei und einigen (zumindest kleinen) Erfolgen, hänge ich gerade am wahrscheinlich letzten Schritt des Makros:

SUB Kundenliste
DIM oDatabaseContext AS OBJECT
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oDocument AS OBJECT
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatasource = oDatabaseContext.getByName("file:///J:/Documents/Immobilien/Interessentenverwaltung.odb")
oConnection = oDatasource.GetConnection("","")
Wait(100)
oDocument.ReportDocuments.getByName("Kundenliste").open
END SUB


So sieht mein Makro aus und es soll den Bericht "Kundenliste" öffnen.

Leider wird mir die vorletzte Zeile Markiert und ein Fehler wird ausgeworfen: "Objektvariable nicht belegt".

Wo liegt jetzt mein Fehler?

Vielen Dank im Voraus! :-)

Gruß + Dank
Swordfish76

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von RobertG » Mo 18. Sep 2017, 16:52

Hallo Swordfish76,

in Deinem Makro ist oDocument nicht belegt. Du lädst nicht das Datenbankdokument sondern suchst nur den Kontakt zu Deiner Datenbank. Wenn das Das Datenbankdokument nicht geladen ist, dann kannst Du auch den Bericht nicht öffnen.

Code: Alles auswählen

DIM Arg()
oDocument = StarDesktop.loadComponentFromURL("file:///J:/Documents/Immobilien/Interessentenverwaltung.odb", "_blank", 0, Arg() )
Diese beiden Zeilen vor dem Wait-Befehl dürften das Dokument öffnen und anschließend auch den Bericht.

der Rest steht ja bereits in dem vorherigen Makro (Unsichtbar machen, anschließend schließen ...)

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Swordfish76
Beiträge: 19
Registriert: Di 11. Jul 2017, 20:32

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von Swordfish76 » Di 19. Sep 2017, 12:18

Danke für die schnelle Antwort Robert,

aber leider kommt LibreOffice damit nicht so ganz klar.
Ich bekomme folgenden Fehler:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.WrappedTargetException
Message:
TargetException:
Type: com.sun.star.sdbc.SQLException
Message: [OOoBase] Es besteht keine Verbindung zur Datenbank..


Mein Makro sieht, nachdem ich Deine Zeilen eingefügt habe, so aus:

SUB Kundenliste
DIM oDatabaseContext AS OBJECT
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oDocument AS OBJECT
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatasource = oDatabaseContext.getByName("file:///J:/Documents/Immobilien/Interessentenverwaltung.odb")
oConnection = oDatasource.GetConnection("","")
DIM Arg()
oDocument = StarDesktop.loadComponentFromURL("file:///J:/Documents/Immobilien/Interessentenverwaltung.odb", "_blank", 0, Arg() )
Wait(100)
oDocument.ReportDocuments.getByName("Kundenliste").open
END SUB


Die Datenbank öffnet sich - soweit funktionieren Deine Zeilen schonmal. :)

Dabei gehe ich so vor, wie jeder Enduser (die es nachher bedienen sollen) es tun würde.
Ich öffne mein externes Formular "Start.odt" und klicke auf den Button, hinter dem das Makro liegt.
Mein Formular und die eigentliche Datenbank liegen im gleichen Verzeichnis und die Datenbank an sich
ist nicht in Libreoffice anderweitig angemeldet.

Vielleicht habe ich ja auch einen Gedankenfehler... Ich stelle die Verbindung zur Datenbank her und öffne sie. Dann müsste doch die Datenbank als aktive Datei vorhanden sein, über die ich auf den Bericht oder Formulare zugreifen kann, oder?

Gruß,
Swordfish76

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von RobertG » Di 19. Sep 2017, 17:27

Hallo Swordfish,

Code: Alles auswählen

SUB Kundenliste
DIM oDocument AS OBJECT
DIM Arg()
oDocument = StarDesktop.loadComponentFromURL("file:///J:/Documents/Immobilien/Interessentenverwaltung.odb", "_blank", 0, Arg() )
oDocument.getCurrentController().connect
Wait(100)
oDocument.ReportDocuments.getByName("Kundenliste").open
END SUB
Du erhältst keine Verbindung zur Datenbank, weil die Verbindung bei Deinem Makro bereits durch die Anfangszeilen belegt ist. Und jetzt sind wir wieder fast Original bei dem Makro aus dem Handbuch ...

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Swordfish76
Beiträge: 19
Registriert: Di 11. Jul 2017, 20:32

Re: Fehler beim Aufruf eines Berichts über externes Formular

Beitrag von Swordfish76 » Mi 18. Okt 2017, 12:18

Hallo Robert,

erstmal vielen Dank für Deine Geduld und Deine Lösungsvorschläge. :)
Letztenendes war es genau das, wonach ich gesucht habe.

Soweit, so gut...

Lokal funktioniert alles wunderbar über das externe Formular.
Die Berichte werden genauso aufgerufen, wie es sein soll.

Sobald ich das Ganze aber auf den Server lege und in der gleichen
Konstellation arbeite (Pfade sind natürlich angepasst und Formulare und
die Datenbank liegen im selben Verzeichnis, stürzt mir Base komplett ab.

Im Handbuch hast Du geschrieben, dass eine kleine Wartezeit von 100 Millisekunden
ausreichend sein soll, damit vorher die Verbindung zur Datenbank hergestellt werden kann,
um so den Absturz zu verhindern.

Leider ist bei mir aber selbst eine Wartezeit von 10000 Millisekunden nicht ausreichend,
damit es funktioniert und nicht abstürzt.

Hättest Du noch eine alternative Idee?

Gruß + Dank
Swordfish76

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten