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. 🤗

Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
caldir65
Beiträge: 17
Registriert: Sa 26. Nov 2022, 22:26

Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von caldir65 » Sa 7. Jan 2023, 17:34

Hallo,

ich habe eine SQL-Datenbank auf meinem Server, die ich über Base von einem PC bearbeite mit LO 7.3.7.2 unter Kubuntu 22.10.
Das dafür erstellte Formular funktioniert auch wunderbar, auch Bilder und PDF-Dokumente bekomme ich verlinkt mit Vorschau. Für die PDF-Dokumente habe ich zusätzlich einen Button gemacht bzw. aus der Beispieldatenbank übernommen, welcher via Makro das PDF-Dokument in einem auf dem PC installierten Programm anzeigen soll. Das Makro habe ich meinen Gegebenheiten angepasst (Formular- und Feldnamen).

Wenn ich jetzt bei einem Formular mit einem PDF-Dokument den Button anklicke (angelegt mit Aktion ausführen: Standard.Module1.DateiAuslesen_mitName (document, Basic)), kommt folgende Meldung:

Code: Alles auswählen

BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Text.
Diese Makros habe ich übernommen:

Code: Alles auswählen

REM  *****  BASIC  *****

SUB Betrachten
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stUrl AS STRING
	DIM stFeld AS STRING
	DIM arUrl_Start()
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDrawpage.Forms.getByName("HausratMain")
	oFeld = oForm.getByName("GraphischesFeld")
	stUrl = oFeld.BoundField.getString
	REM Start des Files mit der entsprechenden URL-Verbindung
	arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(arUrl_Start(0) + stUrl)
	oShell.execute(stFeld,,0)
END SUB

SUB DateiAuslesen
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oStream AS OBJECT
	DIM oShell AS OBJECT
	DIM oPath AS OBJECT
	DIM oSimpleFileAccess AS OBJECT
	DIM st AS STRING
	DIM stPfad AS STRING
	DIM stFeld AS STRING
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDrawpage.Forms.getByName("HausratMain")
	oFeld = oForm.getByName("Betrachten")
	oStream = oFeld.BoundField.getBinaryStream
	oPath = createUnoService("com.sun.star.util.PathSettings")
	st = ""	'Je nach System könnte eine Endung der Datei notwendig sein
	stPfad = oPath.Temp & "/DbDatei" & st
	oSimpleFileAccess = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	oSimpleFileAccess.writeFile(stPfad, oStream)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(stPfad)
	oShell.execute(stFeld,,0)	
END SUB

SUB DateiAuslesen_mitName
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oFeld2 AS OBJECT
	DIM oStream AS OBJECT
	DIM oShell AS OBJECT
	DIM oPath AS OBJECT
	DIM oSimpleFileAccess AS OBJECT
	DIM stName AS STRING
	DIM stPfad AS STRING
	DIM stFeld AS STRING
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDrawpage.Forms.getByName("HausratMain")
	oFeld = oForm.getByName("Betrachten")
	oFeld2 = oForm.getByName("rechnung")
	stName = oFeld2.Text
	IF stName = "" THEN
		stName = "DbDatei"
	END IF
	oStream = oFeld.BoundField.getBinaryStream
	oPath = createUnoService("com.sun.star.util.PathSettings")
	stPfad = oPath.Temp & "/" & stName
	oSimpleFileAccess = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	oSimpleFileAccess.writeFile(stPfad, oStream)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(stPfad)
	oShell.execute(stFeld,,0)
END SUB

SUB DateiName	
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oField AS OBJECT
	DIM stImageUrl AS STRING
	DIM stFile AS STRING
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	oForm = oDrawpage.Forms.getByName("HausratMain")
	oField = oForm.getByName("Betrachten")
	stImageUrl = oField.ImageUrl
	IF stImageUrl <> "" THEN
		stFile = FileNameoutofPath(stImageUrl)
		oForm.UpdateString(oForm.FindColumn("DateiName"), stFile)
	END IF
END SUB
Was läuft da noch falsch?

Danke für die Hilfe.

Gruß, CHristoph
Dateianhänge
Auswahl_030-Formnav.png
Auswahl_030-Formnav.png (39.08 KiB) 835 mal betrachtet
Gruß, Christoph
----
LibreOffice Linux, Kubuntu 23.10, MariaDB 10 auf SynologyServer

Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von Wanderer » Sa 7. Jan 2023, 19:19

Der Fehlermeldung nach scheint das Objekt "rechnung" auf dem Formular keine Methode "Text" zu haben.

Erster Schritt also: Was ist das fur ein Feld und mit welcher Spalte der Datenbank ist es verknüpft, welchen Typ hat die Spalte in der Datenbank.

? Bilder und PDF sind extern gespeichert (Datenbank enthält Dateinamen) oder intern als BLOB?
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

caldir65
Beiträge: 17
Registriert: Sa 26. Nov 2022, 22:26

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von caldir65 » Sa 7. Jan 2023, 19:57

Das Tabellenfeld in der DB ist vom Typ "Text (varchar)", bei dem Feld im Formular habe ich ein "grafisches Steuerelement" angelegt, welches mit dem Tabellenfeld rechnung verknüpft ist.

In der Tabelle werden nur die Pfade und Dateinamen zu den Dateien abgelegt, die Dateien selber liegen in Unterverzeichnissen der LO-DB
Gruß, Christoph
----
LibreOffice Linux, Kubuntu 23.10, MariaDB 10 auf SynologyServer

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

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von RobertG » So 8. Jan 2023, 12:27

Du hast da ein Grafisches Steuerelement. Das hat die Eigenschaft "Text" wohl nicht. Nimm doch einfach "CurrentValue".
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

caldir65
Beiträge: 17
Registriert: Sa 26. Nov 2022, 22:26

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von caldir65 » So 8. Jan 2023, 12:56

Hallo Robert,

wie meinst DU das mit "einfach CurrentValue nehmen"? Ich bin jetzt nicht soo bewandert (stehe noch ziemlich am Anfang) mit LibeBase und insb. Makros.

Gruß, Christoph
Gruß, Christoph
----
LibreOffice Linux, Kubuntu 23.10, MariaDB 10 auf SynologyServer

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

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von RobertG » So 8. Jan 2023, 14:48

Hallo Christoph,

Du willst mit

Code: Alles auswählen

oFeld2 = oForm.getByName("rechnung")
stName = oFeld2.Text
den angezeigten Text von einem Feld auslesen. Sehe ich aber Deinen Screenshot, dann handelt es sich bei dem Formularfeld nicht um ein Textfeld sondern um ein grafisches Kontrollfeld zur Anzeige von Bildern usw.
Also:

Code: Alles auswählen

stName = oFeld2.CurrentValue
sofern es sich tatsächlich um einen Text handelt klappt das. In der ersten Prozedur steht ein Weg, wie so eine URL aus dem Kontrollfeld auch ausgelesen werden kann:

Code: Alles auswählen

oFeld = oForm.getByName("GraphischesFeld")
stUrl = oFeld.BoundField.getString
Der Text steht also nicht sichtbar auf der Benutzeroberfläche, wohl aber in dem mit dem Formular verbundenen Tabelle. Deswegen kann aus dem verbundenen Feld (BoundField) der Text ausgelesen werden. Das ist bei einem grafischen Kontrollfeld dann gleichbedeutend mit einer URL. Bei Dir wird dann daraus:

Code: Alles auswählen

oFeld2 = oForm.getByName("rechnung")
stName = oFeld2.BoundField.getString
Nur bezweifele ich, dass bei Dir überhaupt Text in dem Feld steht, denn Du nutzt ja ein Makro, das dazu dient, ein Bild aus der Tabelle aus zu lesen, und nicht ein Bild anzuzeigen, das irgendwo in einem Pfad liegt.

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

caldir65
Beiträge: 17
Registriert: Sa 26. Nov 2022, 22:26

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von caldir65 » So 8. Jan 2023, 16:58

Hallo Robert,

mit Deiner Bemerkung "... in der ersten Prozedur ..." hast Du mich auf die Lösung gebracht - es sollte immer die falsche Prozedur aufgerufen werden - ich habe mich von der Namensgebung verleiten lassen, für mich war die Prozedur "DateiAuslesen_mitName" erstmal die Wahl - dabei hätte ich einfach nur die Prozedur "Betrachten" aufrufen müssen, damit es funktioniert.

Danke, so funktioniert es jetzt.

Gruß, Christoph
Gruß, Christoph
----
LibreOffice Linux, Kubuntu 23.10, MariaDB 10 auf SynologyServer

caldir65
Beiträge: 17
Registriert: Sa 26. Nov 2022, 22:26

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von caldir65 » Di 10. Jan 2023, 21:15

Moin,

wie müsste ich das denn jetzt ausgestalten, wenn ich jetzt den Button bzw. das Makro den Inhalt eines Feldes in einem Unterformular abrufen lasse - also Formular "HausratMain", Unter-Formular "Abfrage-Anzeige", Grafisches Steuerelement "Rechnung" (statt Formular "HausratMain", Steuerelement "Rechnung")

Code: Alles auswählen

SUB Betrachten
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stUrl AS STRING
	DIM stFeld AS STRING
	DIM arUrl_Start()
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDrawpage.Forms.getByName("Abfrage-Anzeige")
	oFeld = oForm.getByName("Rechnung")
	stUrl = oFeld.BoundField.getString
	REM Start des Files mit der entsprechenden URL-Verbindung
	arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(arUrl_Start(0) + stUrl)
	oShell.execute(stFeld,,0)
END SUB{/code]
Dieses Makro funktioniert, wenn das abgefragte Feld im Hauptformular liegt, ich hätte es aber gerne im Unterformular ...

Gruß, Christoph
Gruß, Christoph
----
LibreOffice Linux, Kubuntu 23.10, MariaDB 10 auf SynologyServer

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

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von RobertG » Di 10. Jan 2023, 21:29

Mach' das mit dem auslösenden Ereignis. Der Button muss dann nur in dem entsprechenden Formular liegen. Der Name des Formulars spielt keine Rolle. Dann musst Du nicht lange nach dem Formular suchen:

Code: Alles auswählen

SUB Betrachten(oEvent AS OBJECT)
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stUrl AS STRING
	DIM stFeld AS STRING
	DIM arUrl_Start()
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oEvent.Source.Model.Parent
	oFeld = oForm.getByName("Rechnung")
	stUrl = oFeld.BoundField.getString
	REM Start des Files mit der entsprechenden URL-Verbindung
	arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(arUrl_Start(0) + stUrl)
	oShell.execute(stFeld,,0)
END SUB{/code]
Diesen schnelleren Zugriff kannte ich am Anfang noch nicht. Inzwischen arbeite ich sehr häufig mit dem auslösenden Ereignis.

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

caldir65
Beiträge: 17
Registriert: Sa 26. Nov 2022, 22:26

Re: Base-Formular und MariaDB: Fehler statt PDF-Anzeige in externem Prog

Beitrag von caldir65 » Mi 11. Jan 2023, 08:10

Moin Robert,

vielen Dank, das funktioniert!

Gruß, Christoph
Gruß, Christoph
----
LibreOffice Linux, Kubuntu 23.10, MariaDB 10 auf SynologyServer

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