Как обновить все таблицы в форме? База LibreOffice

У меня есть 3 таблицы в единой форме, они используют SQL-запросы для выбора данных. Мне нужно как-то их обновить, но ничего не работает.

Например. это вообще не работает:

oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = oBaseContext.getByName(dbName)
oCon = oDataSource.getConnection("", "")
oCon.getTables().refresh()

И это обновляет только первую таблицу:

oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
oFrame = ThisComponent.getCurrentController().getFrame()
oDisp.executeDispatch(oFrame, ".uno:Refresh", "", 0, Array())

Как мне их все обновить?


person Dalius    schedule 23.05.2013    source источник


Ответы (2)


Боже мой, это было так легко, теперь я чувствую себя тупым:

Sub reloadAllTables
    Dim Forms : Forms = ThisComponent.DrawPage.Forms
    Dim i%
    For i = 0 To Forms.getCount()-1
        Forms.getByIndex(i).reload()
    Next
End Sub
person Dalius    schedule 23.05.2013

Перезагрузка форм не обновляет таблицы, элементы управления таблиц обновляются с помощью .refresh для каждого столбца, например:

SUB refreshTables(oForm as object)
DIM cnt as integer, cnt2 as integer, tot as integer, tot2 as integer
DIM oFormObj as object

'get number of form object
tot = oForm.getCount - 1
IF tot > -1 THEN
    FOR cnt = 0 TO tot
        'next form object
        oFormObj = oForm.getByIndex(cnt) 
        'is object a table control AKA grid control
        IF oFormObj.ImplementationName = "com.sun.star.comp.forms.OGridControlModel" THEN
            'refresh each column
            tot2 = oFormObj.getCount - 1
            IF tot2 > -1 THEN
                FOR cnt2 = 0 TO tot2
                    oFormObj.getByIndex(cnt2).refresh
                NEXT
            ENDIF
        ENDIF
    NEXT
ENDIF
END SUB
person jonpatterns    schedule 22.11.2014
comment
.refresh метод, похоже, применяется только к списку и полю со списком, но не к другим типам элементов управления таблицей. - person Salvador; 03.11.2017