automatyczne odświeżanie kwerendy

Użytkowanie arkusza kalkulacyjnego
dentopolis
Posty: 224
Rejestracja: pn wrz 23, 2013 2:48 pm

automatyczne odświeżanie kwerendy

Post autor: dentopolis »

mam zarejestrowane połączenie z bazą base, pobieram dane i działa, ale chciałbym, żeby kwerenda odświeżała się automatycznie przy otwarciu arkusza, czy to możliwe?
LibreOffice 7.6
Awatar użytkownika
Rafkus
Posty: 515
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: automatyczne odświeżanie kwerendy

Post autor: Rafkus »

Jest to możliwe, musisz nagrać makro odświeżające zakres danych, a następnie przypisać je do zdarzenia Otwórz dokument, z tym że znam 2 metody utworzenia tabeli przestawnej w arkuszu z bazy danych.

Metoda 1.
Do arkusza są pobierane dane z bazy np. do zakresu Arkusz1.A1:D100 i na podstawie tego zakresu jest utworzona tabela.

Kod: Zaznacz cały

sub ZakresDanychTabeliPrzestawnej_1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "Arkusz1.$B$4"		'ta komórka jest w zakresie danych pobranych z bazy
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DataAreaRefresh", "", 0, Array())
end sub
Metoda 2
Tabela przestawna pobiera dane prosto z kwerendy bazy danych

Kod: Zaznacz cały

sub ZakresDanychTabeliPrzestawnej_2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "Arkusz1.$H$7" 		'ta komórka jest w tabeli przestawnej

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end sub
EDIT:
Ups, gdzie ja wczoraj widziałem że chcesz odświeżyć tabelę przestawną ??? :oops: Wykorzystaj makro przedstawione w metodzie 1.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
ODPOWIEDZ