mit meiner Datenbankanwendung komme ich nicht weiter:
Der Fokus soll per Makro ins nächste Formularfeld gesetzt werden. Und zwar in einem Unterformular-Tabellenkontrollfeld. Dort werden Rechnungspositionen eingegeben. Nach errechnen und eintragen der PosNr (soweit funktioniert es) soll der Cursor ins Feld "Artikel" springen, damit nicht erst per Tab-Taste dieses Feld angesteuert werden muß (das funktioniert nicht).
Base meldet: Basic Laufzeitfehler. Objektvariable nicht belegt.
Ich nehme an, er bezieht sich dabei auf die Verwendung des getCurrentController. Allerdings funktioniert der Bezug darauf weiter oben im selben Makro einwandfrei. Auch mehrere Versuche den Controller mit anderer Syntax anzusprechen schlugen fehl, z.B. "...oForm.Parent.CurrentController"
Bin jetzt ratlos und bitte um Eure Hilfe.
Arbeitsmittel:
openSUSE 12.1
LibreOffice Base 3.4.5
HSQLDB 1.8.0.10-24.1 eingebettet
Hier das Makro:
Code: Alles auswählen
Sub PosNr
Dim oDoc as Object
Dim oDocView as Object
Dim oDrawpage as Object
Dim oDatenquelle as Object
Dim oVerbindung as Object
Dim oStatement as Object
Dim oResultSet as Object
Dim oForm as Object
Dim oRechPostForm as Object ' Unterformular, Tabellenkontrollfeld
Dim oPosNr as Object
Dim sPosNr as String
Dim sCountPos as String
Dim sAnzPos as String ' Anzahl der bisherigen Rechnungspositionen
Dim sRechNr as String
Dim FokusGo as Object
Dim oFokusFeld as Object
' Zugriff auf das Formular
oDoc = thisComponent
oDocView = oDoc.getCurrentController()
oDrawpage = oDoc.DrawPage
oForm = oDrawpage.forms.getByName("MainForm")
' Zuriff auf Unterformular "RechPosten" und Tabellenkontrollfeld "RechPosten" (blöde Namensgleichheit)
oRechPostForm = oForm.getByName("RechPosten").getByName("RechPosten")
xray oDocView
' PosNr aus dem Unterformularfeld "PosNr" auslesen
oPosNr = oRechPostForm.getByName("PosNr")
' in Variable sPosNr schreiben
sPosNr = oPosNr.text
' RechNr aus Formularfeld "strRechNr" auslesen
sRechNr = oForm.getByName("strRechNr").text
' SQL-Abfrage mit sRechNr zusammenstellen
sAnzPos = "SELECT COUNT(""PosNr"") FROM ""RechPosten"" WHERE ""RechNr"" = '" + sRechNr + "'"
' Datenbankverbindung erstellen
oDatenquelle = ThisComponent.Parent.DataSource
oVerbindung = oDatenquelle.GetConnection("","")
oStatement = oVerbindung.createStatement
' Abfrage ausführen
oResultSet = oStatement.executeQuery(sAnzPos)
' derzeitigen Wert aus Formularfeld "PosNr" in Variable sPosNr schreiben
' sPosNr = oRechPostForm.getByName("PosNr").text
' Wenn sPosNr noch keinen Wert hat, dann Wert ermitteln und speichern
If sPosNr = "" then
While oResultSet.next()
' erste Spalte des Resultset ausgeben
' msgbox oResultSet.getString(1)
' die PosNr um 1 erhöhen, dafür oResultSet.getstring(1) auf Integer setzen
sPosNr = cint(oResultSet.getString(1)) +1
Wend
' PosNr in String umwandeln
cstr(sPosNr)
' Formularfeld "PosNr" mit neuer PosNr füllen
oRechPostForm.getByName("PosNr").text = sPosNr
' Formularfeld "strRechNr"im Formular speichern
oRechPostForm.getByName("PosNr").commit = true
' Feld in das der Fokus nach eintragen der PosNr springen soll
oFokusFeld = oRechPostForm.getByName("Artikel")
' Currentcontroller über oDocview setzen auf oFokusFeld
FokusGo = oDocView.getControl(oFokusFeld)
xray oFokusGo ' (xray sagt: empty)
' hier hakt's, das macht er nicht, sagt: Objektvariable nicht belegt
FokusGo.setFocus
Endif
End Sub
Gruß
harald