Seite 1 von 1

Datenbank/Makro unter Linux und Windows verwenden.

Verfasst: Do 2. Mär 2017, 11:33
von Gundo
Hallo,

Ich verwende unter Linux-Mint 18.1 "LibreOffice 5.1.6.2" folgendes Script.

Code: Alles auswählen

SUB Link_oeffnen_1
    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
    oForm = oDrawpage.Forms.getByName("MainForm")
    oFeld = oForm.getByName("play 1")
    stFeld = oFeld.Text
    IF stFeld = "" THEN
    EXIT SUB
    END IF
    stFeld = convertToUrl(stFeld)
    shell("/usr/bin/mpg321", 1,stFeld)
END SUB
Im Feld "play 1" stehen relativer Pfad und Dateiname zur einer MP3-Datei.

Beispiel: "101-200/110_1.mp3".

Das Programm "mpg321" spielt also die Audiodatei ab. Funktioniert wunderbar, aber nur unter Linux.
Da sich die Pfadstruktur von Linux und Windows 7 ja unterscheiden, funktioniert logischerweise das Scrip nicht unter Windows 7 + Base.

Wie kann man es lösen das im Script automatisch festgestellt wird, ob unter Linux oder Windows gearbeitet wird, und ggf die Pfade
angepaßt werden ?

Ich stelle mir das so vor:
1. Wenn Linux verwendet wird nehme: shell("/usr/bin/mpg321", 1,stFeld)

2. Wenn Windows verwendet wird nehme: shell("c:\Programme\Player\cmdmp3.exe", 1,stFeld)
3. Tausche im "stFeld" "/" gegen "\" aus, und ergänze "D:\Dokumente\".

So das aus "101-200/110_1.mp3" => "D:\Dokumente\101-200\110_1.mp3" wird.

Kann mir da jemand weiterhelfen ?

Gruß Gundo

Re: Datenbank/Makro unter Linux und Windows verwenden.

Verfasst: Do 2. Mär 2017, 17:32
von lorbass
Gundo hat geschrieben:Wie kann man es lösen das im Script automatisch festgestellt wird, ob unter Linux oder Windows gearbeitet wird
Du kennst offenbar Michael Dannenhöfers StarBasic / OpenOffice.org Basic FAQ noch nicht. Dort findest du auch die Antwort zu deiner Frage Wie kann man das verwendete Betriebssystem auslesen?

Gruß
lorbass

Re: Datenbank/Makro unter Linux und Windows verwenden.

Verfasst: Do 2. Mär 2017, 18:46
von musikai
Ich verwende das hier (,das auch OSX erkennt):

Code: Alles auswählen

function getOS() AS String
   select case getGUIType
      case 1: getOS="WINDOWS"
      case 3: getOS="MAC"
      case 4: getOS=iif(instr(environ("PATH"),"/usr/local/bin")=0,"OSX","UNIX")
   end select
end function
Ansonsten kannst Du Windows von Linux auch einfach mit dem GetPathSeparator() unterscheiden, der unter Windows "\" zurückgibt und unter Linux "/".

Re: Datenbank/Makro unter Linux und Windows verwenden.

Verfasst: So 5. Mär 2017, 15:04
von Gundo
Danke für die Tipps. Ich hab es so gelöst:

Code: Alles auswählen

UB Link_oeffnen
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stFeld AS STRING
	DIM oDatenquelle As Object
	DIM sPath As String
	DIM sPath_relativ As String
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	oForm = oDrawpage.Forms.getByName("MainForm")
	oFeld = oForm.getByName("play 1")
	stFeld = oFeld.Text
	IF stFeld = "" THEN
	EXIT SUB
	END IF
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	oDatenquelle = ThisDatabaseDocument.DataSource   
	sPath = ConvertFromUrl(oDatenquelle.Name)
	sPath = DirectoryNameoutofPath(sPath, GetPathSeparator())
	sPath_relativ = sPath + GetPathSeparator() + GetPathSeparator() + stFeld
	OS = GetGUIType()
	IF OS = 4 then shell("/usr/bin/mpg321", 1,sPath_relativ)
	IF OS = 1 then shell("c:\Program Files\cmdmpg\cmdmp3.exe", 1,sPath_relativ)
	END SUB
Vielleicht nicht perfekt, aber es funktioniert. Bin ja kein Programmierer.

Gruß Gundo