Dostęp do BD na zewnętrznym serwerze [SOLVED]
Dostęp do BD na zewnętrznym serwerze [SOLVED]
Witam,
Czy jest możliwość przesłania zawartości arkusza do zewnętrznej bazy danych (na zewnętrznym serwerze)? Mogłoby to być na zasadzie makra, albo wywołania programu (lub np. skryptu php). Czy coś takiego w ogóle jest wykonalne z poziomu calc? Ewentualnie z poziomu zewnętrznego (wyciągnięcie danych z arkusza bez jego uruchamiania). Wolałbym przy tym uniknąć generowania plików csv. Idealnie byłoby, gdybym mógł to zrobić przyciskiem w arkuszu.
Dziękuję i pozdrawiam
Czy jest możliwość przesłania zawartości arkusza do zewnętrznej bazy danych (na zewnętrznym serwerze)? Mogłoby to być na zasadzie makra, albo wywołania programu (lub np. skryptu php). Czy coś takiego w ogóle jest wykonalne z poziomu calc? Ewentualnie z poziomu zewnętrznego (wyciągnięcie danych z arkusza bez jego uruchamiania). Wolałbym przy tym uniknąć generowania plików csv. Idealnie byłoby, gdybym mógł to zrobić przyciskiem w arkuszu.
Dziękuję i pozdrawiam
Ostatnio zmieniony pt paź 12, 2018 2:08 pm przez zwora, łącznie zmieniany 1 raz.
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
I tak, i tak jest możliwe.
a. Makro, np. w reakcji na przycisk: nawiązuje połączenie z bazą, coś robi ze sczytywanymi z arkusza danymi; zamyka połączenie.
Można skorzystać z obsługi źródeł danych przez interfejs odb albo innymi sposobami;
dla Basica patrz https://wiki.openoffice.org/wiki/Docume ... ase_Access,
dla Pythona masz jego własne metody komunikacji z bazami
b. Skrypt zewnętrzny: nawiązuje połączenie z bazą, pobiera dane z pliku ods i coś z nimi robi; zamyka połączenie.
Tu środowisko wybierasz dowolnie, ważne by mieć dostęp do danych w Twoim formacie, powiedzmy ods; źródło danych jest plikiem, Calc nie jest potrzebny. Np. Python ma liczne moduły do komunikacji z różnymi bazami, a do czytania skoroszytu np. ezodf, patrz https://pypi.org/search/?q=ezodf
php? z dostępem do baz nie ma problemu. Ale Calc nie ma interpretera php jako języka makr; a czy php dysponuje gotowym modułem do czytania skoroszytów ods, to nie wiem.
a czy b? zależy, czy bardziej patrzysz na Calca jako środowisko pracy, czy na skoroszyty ods jako na sposób przechowywania danych.
a. Makro, np. w reakcji na przycisk: nawiązuje połączenie z bazą, coś robi ze sczytywanymi z arkusza danymi; zamyka połączenie.
Można skorzystać z obsługi źródeł danych przez interfejs odb albo innymi sposobami;
dla Basica patrz https://wiki.openoffice.org/wiki/Docume ... ase_Access,
dla Pythona masz jego własne metody komunikacji z bazami
b. Skrypt zewnętrzny: nawiązuje połączenie z bazą, pobiera dane z pliku ods i coś z nimi robi; zamyka połączenie.
Tu środowisko wybierasz dowolnie, ważne by mieć dostęp do danych w Twoim formacie, powiedzmy ods; źródło danych jest plikiem, Calc nie jest potrzebny. Np. Python ma liczne moduły do komunikacji z różnymi bazami, a do czytania skoroszytu np. ezodf, patrz https://pypi.org/search/?q=ezodf
php? z dostępem do baz nie ma problemu. Ale Calc nie ma interpretera php jako języka makr; a czy php dysponuje gotowym modułem do czytania skoroszytów ods, to nie wiem.
a czy b? zależy, czy bardziej patrzysz na Calca jako środowisko pracy, czy na skoroszyty ods jako na sposób przechowywania danych.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Dostęp do BD na zewnętrznym serwerze
Dziękuję za odpowiedź. Najbardziej odpowiadałoby mi to pierwsze rozwiązanie z makrem a Basicu. Ale nie mogę nigdzie znaleźć przykładów z połączeniem z bazą danych na zewnętrznym hoście, czyli coś w rodzaju connect(hostname,username,password).
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
Na przykład
https://forum.openoffice.org/en/forum/v ... 20&t=24251
https://forum.openoffice.org/en/forum/v ... 40&t=24209
https://forum.openoffice.org/en/forum/v ... 13&t=62082
Kluczowe jest zainicjowanie obiektu połączenia jdbc.
Miałem podobny działający kod do współpracy z postgresem, ale umarł na nieużywanie. Jak znajdę, podeślę.
Może coś wyjaśni rozdział 8 w http://www.pitonyak.org/database/AndrewBase.pdf
https://forum.openoffice.org/en/forum/v ... 20&t=24251
https://forum.openoffice.org/en/forum/v ... 40&t=24209
https://forum.openoffice.org/en/forum/v ... 13&t=62082
Kluczowe jest zainicjowanie obiektu połączenia jdbc.
Miałem podobny działający kod do współpracy z postgresem, ale umarł na nieużywanie. Jak znajdę, podeślę.
Może coś wyjaśni rozdział 8 w http://www.pitonyak.org/database/AndrewBase.pdf
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Dostęp do BD na zewnętrznym serwerze
Miałem mało czasu, więc nie zajmowałem się tym problemem, ale muszę już wrócić do tematu. Utworzyłem sobie bazę testową, ale mam problem z połączeniem. A w zasadzie wygląda na to, że ze zmiennymi połączenia:
Nie działa nawet coś takiego:
W ostatniej linijce wyskakuje: "Błąd pracy BASIC'A. Nie ustawiono zmiennej obiektu"
Oczywiście dodałem wcześniej funkcje AppendToArray(), CreateProperty(), AppendProperty() zgodnie z podanym wcześniej linkiem.
print oParams też daje ten komunikat (zamiast o nieprawidłowej wartości właściwości), czyli tak jakby w ogóle obiekt nie został utworzony.
Nie działa nawet coś takiego:
Kod: Zaznacz cały
Dim sDatabaseName$
Dim sUserName$
Dim sUserPassword$
Dim sDatabaseHost$
Dim oParams () As New com.sun.star.beans.PropertyValue
sDatabaseHost = "mojadomena.pl:3306/"
sDatabaseName = "mojabaza"
sUserName = "mojlogin"
sUserPassword = "mojehaslo"
AppendProperty(oParams(), "user", sUserName)
AppendProperty(oParams(), "password", sUserPassword)
AppendProperty(oParams(), "JavaDriverClass", "com.mysql.jdbc.Driver")
print oParams.sUserName
Oczywiście dodałem wcześniej funkcje AppendToArray(), CreateProperty(), AppendProperty() zgodnie z podanym wcześniej linkiem.
print oParams też daje ten komunikat (zamiast o nieprawidłowej wartości właściwości), czyli tak jakby w ogóle obiekt nie został utworzony.
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
Czy ktoś już próbował się w ten sposób łączyć i ma jakiś przykład?
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
Kod: Zaznacz cały
print oParams.sUserName
Ale nie znając sposobu działania AppendProporty, nie da się tego rozstrzygnąć.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Dostęp do BD na zewnętrznym serwerze
Funkcje, które zaczerpnąłem z poradnika Andrew Ptonyak'a mają postać:
Kod: Zaznacz cały
Sub AppendToArray(oData(), ByVal x)
Dim iUB As Integer 'The upper bound of the array.
Dim iLB As Integer 'The lower bound of the array.
iUB = UBound(oData ()) + 1
iLB = LBound(oData ())
ReDim Preserve oData(iLB To iUB)
oData(iUB) = x
End Sub
Function CreateProperty(sName$, oValue) As com.sun.star.beans.PropertyValue
Dim oProperty As New com.sun.star.beans.PropertyValue
oProperty.Name = sName
oProperty.Value = oValue
CreateProperty() = oProperty
End Function
Sub AppendProperty(oProperties(), sName As String, ByVal oValue)
AppendToArray(oProperties(), CreateProperty(sName,oValue))
End Sub
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
OK, ale to znaczy, że createProperty(obiekt, nazwa, wartosc) tworzy w obiekcie pole o nazwie / kluczu `nazwa`, a Ty pytasz o pole o nazwie `wartość`:
AppendProperty(oParams(), "user", sUserName) ' tworzy pole nazwane user o nazwie takiej jak sUserName
print oParams.sUserName ' powinno być raczej oParams.user
AppendProperty(oParams(), "user", sUserName) ' tworzy pole nazwane user o nazwie takiej jak sUserName
print oParams.sUserName ' powinno być raczej oParams.user
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Dostęp do BD na zewnętrznym serwerze
Witam,
Z tą próbą dostępu do pola zmiennej to oczywiście racja. Nazwa pola to user, więc powinno być oParams.user. Ale wygląda na to, że obiekt w ogóle nie został utworzony. Nie działa print oParams.user ani print oParams.
Z tą próbą dostępu do pola zmiennej to oczywiście racja. Nazwa pola to user, więc powinno być oParams.user. Ale wygląda na to, że obiekt w ogóle nie został utworzony. Nie działa print oParams.user ani print oParams.
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
Witam,
Udało mi się przejść ten problem:
Zamiast:
powinno być:
Ale teraz utknąłem w następnym miejscu. Po uruchomieniu makra wyskakuje mi monit o treści: "Tablicę należy zwymiarować" i podświetla się linijka: iUB = UBound(oData()) + 1 w funkcji AppendToArray (jej treść jest wcześniej). Funkcja AppendToArray powinna być dobra (w końcu była wiele razy testowana przez jej autora i innych użytkowników). Najprawdopodobniej problem jest z argumentami, które wprowadzam do funkcji. Mój fragment kodu z wywołaniem wygląda następująco:
I po takim wywołaniu wyskakuje opisane wcześniej ostrzeżenie.
Udało mi się przejść ten problem:
Zamiast:
Kod: Zaznacz cały
Dim oParams () As New com.sun.star.beans.PropertyValue
Kod: Zaznacz cały
Dim oParams As New com.sun.star.beans.PropertyValue
Kod: Zaznacz cały
Dim oParams As New com.sun.star.beans.PropertyValue
Dim sUserName$
sUserName = "uzytkownik"
AppendProperty(oParams(), "user", sUserName)
OpenOffice 4.1.6, Windows 10 64bit
Re: Dostęp do BD na zewnętrznym serwerze
OK, to już jest konkret. Łatwo sprawdzić (tylko że teraz ja nie mam zupełnie czasu na grzebanie się w problemach, o których muszę sobie coś poprzypominać).
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Dostęp do BD na zewnętrznym serwerze
Witam,
Posiedziałem jeszcze nad tym tematem i po zasięgnięciu opinii na forum w języku angielskim postanowiłem użyć rozwiązania z generacją pliku csv i pobraniem go w aplikacji webowej.
Zatem dla porządku temat oznaczam jako [SOLVED], choć nie został do końca rozwiązany.
Pozdrawiam
Posiedziałem jeszcze nad tym tematem i po zasięgnięciu opinii na forum w języku angielskim postanowiłem użyć rozwiązania z generacją pliku csv i pobraniem go w aplikacji webowej.
Zatem dla porządku temat oznaczam jako [SOLVED], choć nie został do końca rozwiązany.
Pozdrawiam
OpenOffice 4.1.6, Windows 10 64bit