das mit dem Speicher lag daran, dass nicht nur in den Formular-Elementen "Eingabe erforderlich" auf nein gesetzt werden musste, sondern zusätzlich in der Hinterliegenden Tabelle - damit hatte ich nicht gerechnet.
Jetzt bekomme ich allerdings in folgender Zeile eine Fehlermeldung:
Code: Alles auswählen
oFormNew = oDrawpageNew.forms.getByIndex(0) 'Zugriff auf das neue Formular in dem Formulardokument - Annahme: Formular ist das einzige/erste Formular.
Ich habe folgendes probiert:BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: .
Code: Alles auswählen
oFormNew = oDrawpageNew.forms.getByName( "Hauptformular" )
Hier noch einmal der ganze code zur Klarheit:
Code: Alles auswählen
Sub Formularsprung(oEvent AS OBJECT)
oButton = oEvent.Source.Model 'Button wird über das auslösende Ereignis bestimmt.
oForm = oButton.Parent ' Formular wird über den Button bestimmt
IF oForm.getLong(1) > 0 THEN 'Das erste Feld der Tabelle ist hier grundsätzlich das Primärschlüsselfeld, Integer in HSQLDB, Long in Basic
IF oForm.isNew THEN 'Abspeichern - bei neuem Datensatz insert, bei bestehendem Datensatz update
oForm.insertRow()
ELSE
oForm.updateRow()
END IF
loID = oForm.getLong(1) 'Wert des ersten Feldes auslesen
stNewForm = oButton.Tag 'Zielformular aus den Zusatzinformationen des Buttons auslesen
oFormDocNew = ThisDatabaseDocument.FormDocuments.getByName(stNewForm).open 'Neues Formular öffnen und das Object des Formular weiter nutzen
oDrawpageNew = oFormDocNew.drawpage
oFormNew = oDrawpageNew.forms.getByIndex(0) 'Zugriff auf das neue Formular in dem Formulardokument - Annahme: Formular ist das einzige/erste Formular.
oFormNew.filter = """ID"" = '" + loID + "'" 'Filter definieren und setzen
oFormNew.ApplyFilter = TRUE
oFormNew.reload() 'Formular mit Filter neu laden. Jetzt würde nur noch der Datensatz mit gleicher ID angezeigt
Wait 100 'Wenn zu schnell versucht wird einen Wert zu schreiben ist das Formular noch nicht geladen - Wartezeit 0,1 Sekunden
IF oFormNew.getLong(1) <> loID THEN 'Wenn das ID-Feld ungleich der ID ist, die weitergegeben wurde, dann ist dort kein Wert drin (Filter!)
oFormNew.updateLong(1, loID)
END IF
END IF
End Sub
Rob
Edit:
Zusatzfrage: Wie finde ich die Indexnummer eines Formulars heraus?