Button (mit Macro) in der Toolbar soll Formular öffnen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Button (mit Macro) in der Toolbar soll Formular öffnen

Re: Button (mit Macro) in der Toolbar soll Formular öffnen

von hema » Fr, 18.04.2008 08:30

Hallo Alex,
kann dir leider nicht helfen, würde dir aber empfehlen, betr. Pfad ein neues Thema mit neuer Ueberschrift zu eröffnen, damit deine Frage nicht übersehen wird.

gruss

Re: Button (mit Macro) in der Toolbar soll Formular öffnen

von alex-t.de » Fr, 18.04.2008 07:46

Ich habe irgendwo ein Macro gesehen, dass das aktuelle Base-Dokument registrieren kann. Aber ich finde es nicht. Habe es wohl nicht als Lesezeichen gespeichert.

Aber eigentlich fehlt mir da nur eine Möglichkeit um den Namen und den Pfade des aktuellen Dokumentes abzufragen. De-/Registrierung könnte ich BASIC schreiben, dank http://www.dannenhoefer.de/faqstarbasic ... anken.html.
Gibt es da vielleicht eine einfache Möglichkeit? Ich finde die OOo-BASIC Dokumentation recht unübersichtlich.

Schöne Grüße

Alex

Re: Button (mit Macro) in der Toolbar soll Formular öffnen

von hema » Fr, 18.04.2008 07:12

Salü Alex,
man könnte meinen, wir seien verwandt.
Neben den Hochkommas in SQL ist das mein zweithäufigster Fehler, dass ich etwas in einer TestDB oder in einem Testformular ausprobiere und dann die Namen/Pfade nicht anpasse.

Na Hauptsache, es geht jetzt.
Viel Erfolg
Gruss Markus :mrgreen:

Re: Button (mit Macro) in der Toolbar soll Formular öffnen

von alex-t.de » Do, 17.04.2008 23:06

Danke hema,

ich habe nun den Fehler gefunden. Ich bin anscheinend Stunden lang davon ausgegangen, dass das Macro nicht funktionieren würde. Und ich hätte ohne diesen Hinweis auch noch länger an der falschen Stelle nach dem Fehler gesucht.

Das Problem war nun: Ich habe ein Base-Dokument mit dem Namen "test_db" in einem Ordner "alpha1" erstellt. Zwischendurch habe ich den Ordner dupliziert und in "alpha2" umbenannt, usw.. Dabei bleibt, aber nur das Dokument "test_db" aus dem Ordner "alpha1" in OOo als Datenquelle registriert und zwar mit dem nicht mehr verwendeten Dateipfad. Da sich die aktuelle Datei in einem anderen Verzeichnis befindet liefert der Ausdruck

Code: Alles auswählen

DB=Context.getByName("test_db")
logischerweise nicht das, was waran ich die ganze Zeit gedacht habe.

Ich meine, dass ich zwischendurch mir die Liste der registrierten Datenquellen angeschaut habe, aber dabei habe ich wohl nicht auf das Verzeichnis geachtet, sondern nur auf den Dateinamen.

Das Problem ist nun gelöst. Vielen Dank!

Schöne Grüße

Alex

Re: Button (mit Macro) in der Toolbar soll Formular öffnen

von hema » Do, 17.04.2008 13:02

Habe gerade noch etwas bemerkt:
Wenn ich den Code aus deinem Fall 1 verwende, wird die Startseite problemlos geöffnet.
Unter Windows XP kann ich von der Startseite aus problemlos über die Buttons die weiteren Formulare öffnen.
Unter Linux (Kubuntu 8.04 mit OOo 2.4) geht das nicht. Dort funktioniert es nicht einmal, wenn ich über Extras - Makros - Makros ausführen gehe. Es kann keines der Makros mehr ausgeführt werden.

Habe die DB und die Makros (als Extension) von einem PC auf den anderen kopiert. Ist also alles identisch.

Re: Button (mit Macro) in der Toolbar soll Formular öffnen

von hema » Do, 17.04.2008 12:43

Hallo alex-t,
Habe deine Variante Fall 1 getestet.
Bei mir funktioniert sie tadellos.
Allerdings hatte ich zuerst auch denselben Lauzeitfehler wie du.
Dieser ist jedoch durch einen Verschrieb im Formularnamen erzeugt werden.
Base reagiert sehr heikel auf Gross-Kleinschreibung.
Vielleicht liegt es bei dir auch an sowas.

ZU Fall 2 kann ich nichts sagen, bei mir wird auch die DB ein zweites Mal gestartet.


Gruss

Button (mit Macro) in der Toolbar soll Formular öffnen

von alex-t.de » Do, 17.04.2008 12:06

Hallo Forum,

Formulare oder Berichte aus Formularen läuft nun ohne Probleme. Der nächste Schritt wäre ein STARTER-Formular über denn alle anderen bequem zu erreichen sind. Darin enthalten sind Buttons für sämtliche Formulare und noch dynamisch erzeugte Infos, die dem Benutzer Hinweise geben, welche Aufgaben "dringend" sind. Aber das ist hier nur halb so wichtig.
Nun möchte ich dem Benutzer eine Schaltfläche in der Toolbar von Base einrichten, über die das STARTER-Formular direkt zu erreichen ist. Es wird halt so gewünscht, jeder Klick spart Zeit.

Ich habe nun stundenlang versucht dahinter zu kommen, wie ich es mit einem Macro schaffe ein Formal zu öffnen. Aber die Ergebnisse sind enttäschend.

Fall 1:
Zunächst der Code:

Code: Alles auswählen

Sub openForm1
   Dim Context AS Object
   Dim Conn As Object
   Dim DB As Object
   Dim FormDoc As Object
   Dim Args(1) As New com.sun.star.beans.PropertyValue
   Dim FormName As String
   
   FormName = "STARTER"
   Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
   DB=Context.getByName("test_db")
   Conn=DB.getconnection("","")
   Args(0).Name="ActiveConnection" : Args(0).Value=Conn
   Args(1).Name="OpenMode" : Args(1).Value="open"
   FormDoc=DB.DatabaseDocument.FormDocuments.loadComponentFromURL(FormName,"_self",2,Args) REM << BASIC-Laufzeitfehler.
   FormDoc.CurrentController.Frame.ContainerWindow.setFocus()
End Sub
Dieser produziert an der markierten Stelle folgenden Fehler.
BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.lang.IllegalArgumentException
Message:.
Meine Vermutung ist, dass das Property "ActiveConnection" nicht ok ist. Kennt sich jemand mit BASIC und Base aus und könnte mir bitte erklären, was da schief läuft?
Kann das jemand teste, vielleicht habe nur ich diesen Fehler?!

Fall 2:
Der Code:

Code: Alles auswählen

Sub openForm2
   Dim pProp(1) As New com.sun.star.beans.PropertyValue
   sURL = ConvertToURL("F:\test_db.odb")
   oDoc = starDesktop.loadComponentFromURL(sURL,"_blank",0,Array())
   oForms = oDoc.getFormDocuments()
   oAConnection = oDoc.DataSource.getConnection("","")
   
   pProp(0).Name = "ActiveConnection"
   pProp(0).Value = oAConnection
   pProp(1).Name = "OpenMode"
   pProp(1).Value = "open" ' OR: openDesign

   oFormulario = oForms.loadComponentFromURL("STARTER","_blank",0,pProp()) 
End Sub
Diese Lösung ist sehr unschön!
Erstens wird die URL zur Base-Datei absolut angegeben, was nicht akzeptabel ist. Aber schlimmer noch ist, die Tatsache, dass "starDesktop.loadComponentFromURL(...)" eine neue Instanz von Base öffnet und darin dann das Formular. Ein doppeltes Fenster ist überhaupt nicht akzeptabel.

Bitte um Hilfe, ich komme hier überhaupt nicht weiter!

Danke im Voraus und schöne Grüße!

Alex

Nach oben