[gelöst] Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Xabbu83
Beiträge: 9
Registriert: Sa, 06.06.2009 13:43

[gelöst] Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Beitrag von Xabbu83 »

Hallo,

ich arbeite grade an einer größeren Inventarabfragedatenbank die auf vielen verschiedenen Rechnern (Windows/Linux & evtl verschiedene Ordnerstruktur) laufen soll und dabei auf in einem Verzeichnis abgelegte Bilddaten zugreift.

Bisher ist das Ding noch nicht öffentlich und daher störts auch niemanden, dass man Einstellungen wie das bildanzeigende Programm und den Ablageordner manuell im Basic-Code umstellt, aber ne echte Lösung ist das nicht.

Ich wüsste gern, ob man in einer eigenen Tabelle so Optionen Speichern kann wie "Ablageverzeichnis" (hier "c:\sammlung\") und auch die Art des Betriebssystems mit eventuellem Programm (z.b. Windows: True/False, Linux: True/False, Linuxprogramm: Konquerer/Firefox) Die Windows/Linux-Information könnte man dann in Form von IF-Abfragen einbauen, während man Verzeichnis und Betrachterprogramm einfach als Variable definiert. Mir fehlt aber die Zugriffsmöglichkeit auf die (noch nicht existierende) Tabelle.

Alternativ wäre die Frage, ob man diese Variablen auch oberhalb des "Sub OpenFile" speichern könnte. Dann müssten sie nur einmal definiert werden (es gibt mehrere Dateiöffnungsskripts) und man könnte jedem Anfänger erklären wie er sie verändert, ohne dass er bei dem ganzen Code Panik bekommt.

Hier mal ein exemplarischer Öffnungsdialog (stammt hier aus dem Forum ;-)), momentan für Windows und Bilddateien in c:\sammlung. Linux konnte ich noch nicht ausprobieren, mir wurde aber gesagt, das das so gehn müsste. Änderungsvorschläge sind jederzeit gern gesehn.

Code: Alles auswählen

Sub OpenFile

	dim sText as string
	dim sURL as string
    
	REM --- Text mit der Funktion getTextField() aus dem Textfeld lesen
	sText = getTextField(ThisComponent, "BildDatei")

	REM --- LINUX
	REM --- Pfad & Datei als URL (immer diese Leerzeichen)
	REM sURL = ConvertToURL("c:\sammlung\"+sText+".jpg")
	REM --- Datei mit dem Konqueror öffnen (Linux)
	REM Shell "konqueror " & sURL

	REM --- WINDOWS
	REM --- Datei mit passender Anwendung öffnen (Windows)
		set extShell = CreateObject("Shell.Application")
		extShell.Open "c:\sammlung\"+sText+".jpg"

End Sub
Danke schonmal
Andreas
Zuletzt geändert von Xabbu83 am Mo, 03.08.2009 11:16, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Beitrag von komma4 »

Andreas,

ich habe das so gelöst, dass ich betriebssystem-abhängige Werte / Einstellungen in eigene Routinen verlagert habe, die je nach Auswertung des aktuell laufenden OS aufgerufen werden, und ihre Werte in PRIVATE Variablen speichern.


Du kannst auch im Kopfteil eines Moduls CONST Variablen nutzen.
Oder Du setzt Werte in benutzerdefinierte Variablen der Datei>Eigenschaften (nicht sichtbar für Anwender!)


Zum Anzeigen von JPGs würde ich übrigens Hyperlinks zu den Bildern einsetzen, und nicht per shell.execute bestimmte Anwendungen erzwingen [wenn Du Dokumente verwendest - oder nutzt Du Formulare/Dialoge an dieser Stelle zur Darstellung Deiner Inventurdaten?].


Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Xabbu83
Beiträge: 9
Registriert: Sa, 06.06.2009 13:43

Re: Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Beitrag von Xabbu83 »

komma4 hat geschrieben:Andreas,
Du kannst auch im Kopfteil eines Moduls CONST Variablen nutzen.
Zum Anzeigen von JPGs würde ich übrigens Hyperlinks zu den Bildern einsetzen, und nicht per shell.execute bestimmte Anwendungen erzwingen [wenn Du Dokumente verwendest - oder nutzt Du Formulare/Dialoge an dieser Stelle zur Darstellung Deiner Inventurdaten?].

Hilft Dir das weiter?
Ja, teilweise.

Hallo erstmal, und herzlichen Dank für die Antwort.

ich fange mal von hinten an. Bei der Datenbank handelt es sich um eine Geräteliste, aus der man über eine Suchmaske sich einzelne Geräte anzeigen lassen kann. Bei jeder Buchstabeneingabe in ein Eingabefeld wird die Datensatzanzeige in einer "TableControl" immer weiter reduziert, und wenn man das Gesuchte dort gefunden hat, klickt man drauf und sieht unten ein aus Textfeldern gebasteltes Datenblatt mit allen Infos über das Gerät. Dort sind auch zwei Buttons mit "Bild anzeigen" und "PDF anzeigen" die jeweils ein JPG oder ein PDF öffnen (der Code gehört dazu). Dort einfach nur Links anzuzeigen wäre natürlich auch eine Lösung, die betriebssystemunabhängig läuft. Man müsste dann nurnoch irgendwio den Speicherort einstellen können (unter linux is das ja irgendwas mit /home/nutzer/sammlung oder so).
Dies würde ich den Nutzern auch zutrauen in einer CONST-Variable am Anfang des Codes selbst zu erledigen, einfacher wäre jedoch (meinermeinungnach) eine Tabelle in der das einfach in einem Feld drinsteht, damit man ein Formular erstellen kann (nennen wirs mal "Konfiguration") in der das jeder einfach nur eintippen muss, ohne je Code zu Gesicht zu bekommen.

Nun hierzu
komma4 hat geschrieben: Oder Du setzt Werte in benutzerdefinierte Variablen der Datei>Eigenschaften (nicht sichtbar für Anwender!)
Das ist glaube ich keine Lösung für mich, da das "Bildöffnen" in 4 Formularen genutzt wird, und nach meinem Verständnis dann auch 4x bearbeitet werden müsste. Außerdem will ich die Anwender nicht dazu bringen die Formulare zu "bearbeiten", sie sollen sie nur "nutzen". Da die Datenbank zum Download angeboten wird, gibts außer ner Readme auch keinen sonderlichen Support.

Den ersten Teil hab ich jedoch nicht verstanden.
komma4 hat geschrieben: ich habe das so gelöst, dass ich betriebssystem-abhängige Werte / Einstellungen in eigene Routinen verlagert habe, die je nach Auswertung des aktuell laufenden OS aufgerufen werden, und ihre Werte in PRIVATE Variablen speichern.
Kannst du hierfür mal bitte irgendein Beispiel posten? Ich verstehe nicht, wie du das Betriebssystem entscheiden lässt, welche Routine genutzt wird (ich nehme mal an, mit Routine meinst du ein ganzes "Sub"). Wenn ich nämlich bei der "Anzeigen-Button" Lösung bleibe (ist bei Vorführungen gut auf Begeisterung gestoßen), dann wäre ja das der Punkt der mich interessiert, alternativ zur "Konfigurationstabelle".

Herzlichen Dank jedenfalls schonmal für deine Antworten, die Idee mit den Hyperlinks war mir so noch nicht gekommen. Ich stände dann allerdings vor dem Problem, dass ich irgendwie den Link anzeigen müsste, wobei in der Gerätetabelle nur der wirkliche Name der Datei gespeichert ist (also "BILD" statt "c:\sammlung\BILD.jpg").

MfG
Andreas <- Der Basic noch nicht wirklich drauf hat
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Beitrag von komma4 »

Ich verstehe nicht, wie du das Betriebssystem entscheiden lässt
nicht ganz: die Laufzeitfunktion GetGUIType() entscheidet

Ausschnitt:

Code: Alles auswählen

l_OS_Index = GetGUIType()
Select Case l_OS_Index
	Case 1
		s_OS = "Windows"
		s_rechnername = Environ("COMPUTERNAME")
		s_benutzername = Environ("USERNAME")
		s_benutzerdomain = Environ("USERDOMAIN")

	Case 3
		s_OS = "MacOS"
	
	Case 4
		s_OS = "Linux"

         	' die folgenden Abfragen funktionieren hier auf SuSE 9.3	
		's_benutzerhome = Environ("HOME")
 		'msgbox s_benutzerhome
 		's_hostname = Environ("HOSTNAME")
		'msgbox s_hostname
 		's_hosttype = Environ("HOSTTYPE")
		'msgbox s_hosttype
 		's_AnmeldeName = Environ("LOGNAME")
		'msgbox s_AnmeldeName
		's_MaschinenTyp = Environ("MACHTYPE")
		'msgbox s_MaschinenTyp	
		's_CPU = Environ("CPU")
		'msgbox s_CPU
		's_Lang = Environ("LANG")
		'msgbox s_Lang	
		's_Pfad = Environ("PATH")
		'msgbox s_Pfad	
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Xabbu83
Beiträge: 9
Registriert: Sa, 06.06.2009 13:43

Re: Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Beitrag von Xabbu83 »

Herzlichen Dank!

Das muss ich heut Abend gleich mal ausprobieren. Das mit den Verzeichnissen werd ich wohl über die Angabe von zwei Standardverzeichnissen als CONST-Variable am Anfang des Dokuments machen. Wenn jemand Sonderwünsche hat, kann ers ja umschreiben.

Code: Alles auswählen

dim VerzWindows as CONST
dim VerzLinux as CONST
dim VerzMac as CONST

VerzWindows = "c:\sammlung\"
VerzLinux= "~/sammlung/
VerzMac= "Ahnungslos"

Sub OpenFile

   dim sText as string
   dim sURL as string

   sText = getTextField(ThisComponent, "BildDatei")

Select Case GetGUIType()
   Case 1
     REM --- WINDOWS
     set extShell = CreateObject("Shell.Application")
     extShell.Open VerzWindows+sText+".jpg"

   Case 3
    REM muss ich mich mal schlau machen was hier rein kann

   Case 4
   REM --- LINUX
   sURL = ConvertToURL(VerzLinux+sText+".jpg")
   REM --- Datei mit dem Firefox öffnen (Linux)
   Shell "firefox " & sURL

End Sub
bin gespannt.

Danke nochmal.
Andreas
Xabbu83
Beiträge: 9
Registriert: Sa, 06.06.2009 13:43

Re: [gelöst] Skript auf nichtgeöffnete Tabelle zugreifen lassen?

Beitrag von Xabbu83 »

Herzlichen Dank,
abgesehn vom fehlenden "End Select" und der falschen Constantendefinition funktioniert das obere Beispiel zumindest für Windows sehr gut. Muss es heute mal einem Linuxer zum Testen geben.

MfG
Andreas
Antworten