Frage stellen
0

Formular in Base soll nach Aktualisierung wieder die gleichen Datensätze anzeigen

gefragt 2016-01-10 19:04:34 +0200

FraHaar Gravatar-Bild

Hallo liebe Forumsmitglieder,

ich habe eine Frage zu einer Formularaktualisierung in einer LibreOffice-Base-Datei. In meinem Formular "Kontenliste_mit_Kontendetails" gibt es die beiden Tabellen-Steuerelemente "Liste_der_Konten" und "Liste_der_Kontobuchungen". Wird in der "Liste_der_Konten" ein Konto ausgewählt, werden in der "Liste_der_Kontobuchungen" direkt alle zugehörigen Buchungen angezeigt.

Auf dem Formular gibt es eine Schaltfläche, mit der ein LibreOffice-Basic-Makro gestartet wird. Das Makro nimmt Buchungen vor. Nach Beendigung der Buchung, soll das Formular aktualisiert werden. Anschließend soll der zuletzt angezeigte Datensatz wieder angezeigt werden.

In der Dokumentation zu LibreOffice habe ich folgenden Basic-Code zur Aktualisierung eines Formulars gefunden:

Private Sub Aktualisieren
    'Beispiel aus Base_Gesamtband_einseitig_V44.pdf, Seite 382:

        DIM oDoc AS OBJECT          'Für momentan aktives Dokument.
        DIM oDrawpage AS OBJECT     'Behälter für alle Formulare
        DIM oForm AS OBJECT         'Nimmt das Formular auf.

        oDoc = thisComponent
        oDrawpage = oDoc.drawpage
        oForm = oDrawpage.forms.getByName("Kontenliste_mit_Kontendetails")

        oForm.reload()

End Sub

Leider habe ich bis jetzt keine Befehle gefunden, mit denen die angezeigten Datensätze der beiden Tabellen-Steuerelemente ermittelt werden können. Nach der Aktualisierung sollen dann die gleichen Datensätze wie vor der Aktualisierung angezeigt werden. In dem Tabellen-Steuerelement "Liste_der_Kontobuchungen" kann alternativ auch der letzte Datensatz angezeigt werden.

Ich würde mich freuen, wenn mir hierzu jemand einen Tipp geben könnte. Vielen Dank!

Viele Grüße Frank

Bearbeiten Tags ändern Melden schließen vereinen löschen

2 Antworten

0

geantwortet 2016-01-24 19:48:31 +0200

RobertG Gravatar-Bild

Hallo Frank,

ich würde in der folgenden Richtung suchen:

DIM loNr AS LONG

loNr = oForm.getRow()

oForm.reload()

oForm.absolute(loNr)

Dafür nimmst Du einfach oForm.reload() aus Deinem Code raus. Probiert habe ich das jetzt nicht.

Gruß

Robert

Bearbeiten Melden löschen Link mehr
0

geantwortet 2016-01-28 22:23:48 +0200

FraHaar Gravatar-Bild

Hallo Robert,

du hast mich mit deinem Hinweis auf die richtige Fährte gebracht! Vielen Dank! Nach ein wenig Trickserei bin ich auf die folgende Lösung gekommen:

Private Sub Aktualisieren
'Beispiel aus Buch Base_Gesamtband_einseitig_V44.pdf, Seite 382.
'Auf Seite 378 stehen Befehle zum Navigieren in einem Formular.
    DIM oDoc AS OBJECT          'Für momentan aktives Dokument.
    DIM oDrawpage AS OBJECT     'Behälter für alle Formulare
    DIM oForm AS OBJECT         'Nimmt das Formular auf.
    DIM oTab AS OBJECT          'Nimmt das Tabellen-Steuerelement im Formular auf.
    DIM loNrForm AS LONG        'Speichert den aktuellen Datensatz im Formular.
    DIM loNrTab AS LONG         'Speichert den aktuellen Datensatz im Tabellen-Steuerelement
    DIM loA AS LONG             'Für Zeitschleife
    DIM loB AS LONG             'Für Zeitschleife

oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("Kontenliste_mit_Kontendetails")
oTab = oForm.getByName("Buchungsdetails")

'Aktuell markierte Datensätze speichern:
loNrForm = oForm.getRow()
loNrTab = oTab.getRow()

'Formular aktualisieren:
oForm.reload()

'Im Formular den alten Datensatz auswählen:
oForm.absolute(loNrForm)

'Zeitschleife!
'Das Formular muss zunächst im Tabellen-Steuerelement
'die passenden Daten zum Datensatz im Formular aufrufen.
'Ohne Zeitschleife stürzt LibreOffice ab, da es keinen Datensatz findet.
For loA = 1 To 1000
    For loB = 1 To 1000
    Next loB
Next loA

'Wenn der Cursor in der Zeile für einen neuen Datensatz steht,
'dann ist der Wert für die gespeichert Zeile 0.
If loNrTab = 0 Then
    'In dem Fall soll zum letzten Datensatz gesprungen werden:
    oTab.last
Else
    'Hier wird der alte ausgewählte Datensatz angesprungen:
    oTab.absolute(loNrTab)
End If
End Sub

Weißt du zufälligerweise noch eine elegante Lösung für die Zeitschleife?

Viele Grüße Frank

Bearbeiten Melden löschen Link mehr

Kommentare

Zeitschleife? Vielleicht hilft Dir der einfache Befehl wait

wait(100) '100 Millisekunden eine Pause einlegen

RobertG Gravatar-BildRobertG ( 2016-02-02 20:05:31 +0200 )Bearbeiten

Hallo Robert, ich komme leider erst jetzt dazu, dir zu antworten. Ja, mit dem WAIT-Befehl klappt es hervorragend. Damit ist es schon viel eleganter. ;-) Vielen Dank!

FraHaar Gravatar-BildFraHaar ( 2016-02-15 22:24:43 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2016-01-10 19:04:34 +0200

Angesehen: 1,177 Mal

Aktualisiert: Jan 24 '16