[erled] Base: Markierfeld verliert Status während des Makros

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: [erled] Base: Markierfeld verliert Status während des Makros

Re: Base: Markierfeld verliert Status während des Makro-Abla

von juetho » Do, 18.10.2012 20:23

Danke für die Erklärung. Damit ist mir die Situation klar, die sich dahinter verbirgt. Wir haben also zwei mögliche Umwege (deinen und meinen). Gruß Jürgen

Re: Base: Markierfeld verliert Status während des Makro-Abla

von DPunch » Do, 18.10.2012 19:21

Servus

Das wird damit zusammenhängen, dass der InsertRow-Cursorstatus ein spezielles Konstrukt ist, oder wie es die API formuliert
The insert row is a special row associated with an updatable result set. It is essentially a buffer where a new row may be constructed by calling the updateXXX methods prior to inserting the row into the result set.
Beim Setzen des Cursors wird das entsprechende Formular komplett zurückgesetzt respektive für diesen Zweck neu geladen.

Lösung: setz das Markierfeld auf ein anderes, eigenes Formular als das, auf dem Du die Methode aufrufst. Da das Feld sowieso keine Datenanbindung hat, brauchst Du es ja eh nicht auf dem "Haupt"-Formular.

[erled] Base: Markierfeld verliert Status während des Makros

von juetho » Di, 16.10.2012 11:17

Ich habe im Base-Formular ein Markierfeld (CheckBox), das nicht an Daten gebunden ist und standardmäßig auf "Aus" steht. Wenn es auf "Ein" umgeschaltet wird, soll per Makro ein neuer Datensatz in der Tabelle angelegt werden, der anschließend noch genauer bearbeitet wird. Das Makro sieht so aus:

Code: Alles auswählen

Sub chbox_checked(oEvent as Object)
  dim ischecked as Boolean
  dim frm as object
  frm = thisComponent.drawpage.forms.MainForm
  ischecked = oEvent.Source.State
  if ischecked then
    frm.moveToInsertRow()
    'frm.updateString(4, "noch ein Eintrag")
    'frm.insertRow()
    'frm.reload()
  else
  end if 
  'oEvent.Source.State = ischecked
End Sub
Problem: Am Ende des Makros steht die CheckBox immer auf "Aus" - unabhängig davon, welche der auskommentierten Zeilen gültig gemacht werden. Wird dieses Verhalten wegen moveToInsertRow benötigt, gibt es eine andere Erklärung, oder kann es als Fehler angesehen werden? (In der Bug List finde ich nichts, aber das kann natürlich an unpassenden Suchkriterien liegen.) Jürgen

LibreOffice Version 3.6.2.2 (Build ID: da8c1e6)

Bitte nicht wundern über den Versuchsaufbau: Mit der Checkbox sollte auch in anderen Makros geprüft werden, ob "gerade" ein neuer Datensatz bearbeitet wird oder ein schon vorhandener; die Navigationsleiste gehört eigentlich nicht in dieses Formular. Das Beispiel wurde nur auf das Wesentliche reduziert und ist in dieser Form ziemlich sinnfrei. Als Ausweg kann und werde ich mit Button und Label arbeiten.
Dateianhänge
jt-test-checkbox.odb
(14.23 KiB) 50-mal heruntergeladen

Nach oben