🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst]Dateien link in Base

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

[gelöst]Dateien link in Base

Beitrag von malt14 » So 8. Mär 2015, 15:11

Guten Tag,

diese Informationen fand ich bereits:

http://www.libreoffice-forum.de/viewtop ... 10&t=12482
http://www.libreoffice-forum.de/viewtop ... 10&t=10371

Hyperlinks kann man in Writer und Calc einfügen, jedoch nicht in Base Tabellen, weil es dafür keinen Feldtyp gibt?

In einer Tabelle kann man in einem Feld mit Typ Text den Dateipfad eingeben, in einem Formular mit Schaltfläche mittels eines Makro diese Datei dann öffnen.

Ginge das auch in einem Datenblattformular mit einem Button; ohne Schaltfläche? Das Formular würde ein Feld mit dem Dateipfad als Text enthalten. Sobald man dieses Feld anklickt, bzw. den Cursor in das Feld setzt, und dann den Button anklickt, öffnet das Makro die Datei.
Das Makro sollte also ohne Bezug auf ein bestimmtes Formular arbeiten und sich nur auf ein Feld in einer Tabelle beziehen. Verschiedene Formulare im Datenblattformat beziehen sich in meiner Datenbank auf diese Tabelle. Bei der Vielzahl der Datensätze ist das Datenblattformat übersichtlich. Die Datei des jeweiligen Datensatzes könnte dann mittels des Button geöffnet werden, gleichgültig in welchem Formular man sich befindet.

Ich benötigte ein Beispiel, um dies entsprechend zu kopieren, da ich Makros nicht kenne.

Grüße

Malt

LibreOffice Version: 4.2.8.2; keine späteren Versionen, da dann Probleme mit bestimmten Calc Funktionen

Betriebssystem
Windowssystem: Microsoft Windows 8.1 Home
Kompatibel mit Plattform : x64
Zuletzt geändert von malt14 am Di 10. Mär 2015, 22:06, insgesamt 1-mal geändert.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Dateien link in Base

Beitrag von RobertG » So 8. Mär 2015, 16:39

Hallo Malt,

außerhalb eines Formulars kannst Du meines Wissens nicht über einen Mausklick z.B. auf ein Tabellenfeld irgendein Makro auslösen.
Wenn Du ein Tabellenkontrollfeld in einem Formular meinst, dann geht das genauso wie in den von Dir bereits vorgefundenen Beispielen. Du brauchst keinen Button sondern startest das Makro durch einen Klick auf das entsprechende Feld.
Aus Deinem Text werde ich nicht ganz schlau: "Datenblattformular mit einem Button; ohne Schaltfläche"??? "Makro ohne Bezug auf ein bestimmtes Formular"???
Wenn Du das etwas genauer beschreibst kannst Du auch konkretere Antworten bekommen. So weiß ich nicht, ob Du ein Formular hast oder nicht, einen Button willst oder nicht ...

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

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: Dateien link in Base

Beitrag von malt14 » So 8. Mär 2015, 18:21

Hallo Robert,

Dank für die Antwort.

Ich dachte an ein Makro, welches für jedes angewählte Datenfeld in einem Formular versucht, den Inhalt wie einen Hyperlink zu öffnen. Das Makro selbst würde über einen Button gestartet. Auf diese Weise hätte man in einem Datenfeld mit dem Pfad durch dieses Makro einen Hyperlink. Man müsste nicht in jedem Formular eine Schaltfläche einrichten.


Meine Base Tabelle beinhaltet mehrere hundert Datensätze. Zu jedem Datensatz existiert eine Writer Datei mit weiteren Informationen, welche gelegentlich benutzt wird. Die Datensätze werden nach Bedarf in vier Formularen aufgerufen. Zur besseren Übersicht sind die Formulare im Datenblatt Format. Um gelegentlich auf die jeweilige Writer Datei zugreifen zu können, wäre es am einfachsten, dies durch Anklicken einer Schaltfläche im Datenblatt Formular zu erledigen, da ein Hyperlink nicht möglich ist.

Formular.png

Eine Spalte mit dem Datenfeld "Datei" kann ich hinzufügen. Kann man in ein solches Datenblatt auch eine Spalte mit einer Schaltfläche einfügen?


In Deinem Makro müsste ich "Formular" durch den Namen meines Formulars, "Datei" durch den Namen des Datenfeldes (Inhalt: Dateipfad) ersetzen. Worauf bezieht sich "Dateiauswahl"?
Muss für jedes Formular ein Makro geschrieben werden, da sich die Formularnamen unterscheiden?

Code: Alles auswählen

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

SUB Datei_Aufruf
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stFeld AS STRING
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm=oDrawpage.Forms.getByName("Formular")
	oFeld=oForm.getByName("Datei")
	REM Den Text aus der Dateiauswahl auslesen
	stFeld=oFeld.Text
	REM Start des Files mit der entsprechenden URL-Verbindung
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(stFeld)
	oShell.execute(stFeld,,0)
END SUB

SUB Datei_uebertragen
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oFeld2 AS OBJECT
	DIM stFeld AS STRING
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm=oDrawpage.Forms.getByName("Formular")
	oFeld=oForm.getByName("Dateiauswahl")
	REM Den Text aus der Dateiauswahl auslesen
	stFeld=oFeld.Text
rem	msgbox stFeld
	oFeld2=oForm.getByName("Datei")
	oFeld2.BoundField.updateString(stFeld)
END SUB



Grüße

Malt
Dateianhänge
Formular.PNG
Formular.PNG (39.49 KiB) 8028 mal betrachtet

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Dateien link in Base

Beitrag von RobertG » So 8. Mär 2015, 19:43

Hallo Malt,

versuche einmal den Weg, den das beiliegenden Beispiel einschlägt. Du musst mit der Maus einen Klick auf den jeweiligen Links ausführen.

Gruß

Robert
Dateianhänge
Beispiel_Linkaufruf.odb.zip
Linkaufruf aus einem Tabellenkontrollfeld
(11.07 KiB) 702-mal heruntergeladen
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

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: Dateien link in Base

Beitrag von malt14 » So 8. Mär 2015, 22:22

Hallo Robert,

genau das suchte ich!
Bereits in ein Formular eingefügt und probiert. Funktioniert sehr gut.

Vielen Dank!

Ein Formular bezieht sich auf eine Abfrage, welche per Funktion die letzten Datensätze eines Namens auswählt und gruppiert. Die angezeigten Datensätze lassen sich in der Abfrage und im Formular nicht bearbeiten und keine neuen hinzufügen.
In diesem Formular funktioniert der Aufruf der Datei nicht.

Grüße

Malt

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Dateien link in Base

Beitrag von RobertG » Mo 9. Mär 2015, 16:37

Hallo Malt,

dass das Makro gar nicht ausgelöst wird, wenn sich das Formulkar auf eine nicht bearbeitbare Abfrage bezieht, werde ich wohl als Bug melden. Alle Ereigbnisse, die mit dem Feld verbunden sind (innerhalb des Tabellenkontrollfeldes) sind dann lahm gelegt. Was geht:
Feld markieren und über einen Button starten.
Hier das komplette Makro dazu:

Code: Alles auswählen

SUB Website_Aufruf(oEvent AS OBJECT)
	REM Aufruf einer Website oder des Mailprogramms mit einer vorgegebenen Mailadresse
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stFeld AS STRING
	oForm = oEvent.Source.Model.Parent
	stFeld = oForm.getString(3)
	IF stFeld = "" THEN
		EXIT SUB
	END IF
	IF InStr(stFeld,"@") THEN
		stFeld = "mailto:"+stFeld
	ELSEIF InStr(stFeld,"http://") THEN
		stFeld = convertToUrl(stFeld)	'convertToUrl erkennt, dass mit http:// bereits eine Verbindung vorgegeben ist. file:/// wird nicht gesetzt
	ELSE	
		stFeld = "file:///"+stFeld
		stFeld = convertToUrl(stFeld)	'convertToUrl erkennt, dass mit http:// bereits eine Verbindung vorgegeben ist. file:/// wird nicht gesetzt
	END IF
	REM Start des Files mit der entsprechenden URL-Verbindung
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	oShell.execute(stFeld,,0)
END SUB
Der Button gilt jetzt allerdings nur für das 3. Feld. Da musst Du jetzt entsprechend anpassen.

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

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Dateien link in Base

Beitrag von RobertG » Mo 9. Mär 2015, 17:56

Hallo Malt,

ich habe das als Bug gemeldet:
https://bugs.documentfoundation.org/sho ... i?id=89917

Das hängt wohl mit dem Tabellenkontrollfeld zusammen. Dort finden die Ereignisse erst dann statt, wenn der Inhalt des Feldes markiert ist. Wenn Du über einen Mausklick ein Ereignis auslösen willst, dann brauchst Du auch da einen Doppelklick: Einen zum Markieren und den nächsten für das Ereignis. Deshalb funktionieren Ereignisse wie OnMousOver auch nur auf markierten Feldern. So konnte ich z.B. nicht den Mauszeiger ändern, wenn die Maus bewegt wurde.

Bei normalen Feldern ist das nicht der Fall. Die reagieren auch bei einer Abfrage die schreibgeschützt ist. Wenn also die Links außerhalb des Tabellenkontrollfeldes angeklickt würden, dann würde dort auch alles ohne einen gesonderten Button und sogar mit geändertem Mauszeiger möglich sein.

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

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: Dateien link in Base

Beitrag von malt14 » Mo 9. Mär 2015, 22:55

Hallo Robert,

für dieses Formular benötige ich die Abfrage mit Funktion; den Schreibschutz kann ich demnach nicht vermeiden.

Da bei mir bestimmte Funktionen in Calc in höheren Versionen als 4.2.8.2 nicht funktionieren, dachte ich, es liegt beim Makro vielleicht kein Bug vor, sondern die Probleme werden von meinem System verursacht.

Ich ersetzte im Makro (3) durch (1), weil der Dateipfad im ersten Feld ist.
Über Anpassen fügte ich einen Befehl in der Symbolleiste hinzu, der das Makro ausführt.
Beigefügte Fehlermeldungen erhalte ich - Nr. 2 nach weiterer Ausführung des Makros nach dem ersten Fehler.

Dank für all Deine Hilfe.

Grüße

Malt
Dateianhänge
Website_Aufruf.PNG
Website_Aufruf.PNG (67.7 KiB) 7968 mal betrachtet
Website_Aufruf 2.PNG
Website_Aufruf 2.PNG (65.19 KiB) 7968 mal betrachtet

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Dateien link in Base

Beitrag von RobertG » Di 10. Mär 2015, 18:01

Hallo Malt,

ich bin davon ausgegangen, dass der Button in dem Formular liegt, aus dem heraus Du auch den Link starten willst (rechts neben dem Tabellenkontrollfeld oder wo auch sonst). Wenn Du das Makro von der Symbolleiste oder irgendwo anders her ausführst hast Du erst einmal keinen Kontakt zum Formular. Da müsste ich jetzt auch suchen, wie ich von dort aus zum Formular weiter komme. Mal sehen, was ich da machen kann.

Vielleicht hilft, statt des Events

Code: Alles auswählen

oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("MainForm")
Ich gehe aber davon aus, dass bereits "thisComponent" nicht zu dem Formular führt.

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

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: Dateien link in Base

Beitrag von malt14 » Di 10. Mär 2015, 22:05

Hallo Robert,

mit einer Schaltfläche im Formular funktioniert es.

Vielen Dank!

Wie von Dir vermutet, beginnt das Makro mit dem geänderten Code nicht:
Vielleicht hilft, statt des Events

Code: Alles auswählen
oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("MainForm")
Grüße

Malt


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten