Dostęp do BD na zewnętrznym serwerze [SOLVED]

Użytkowanie arkusza kalkulacyjnego
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Dostęp do BD na zewnętrznym serwerze [SOLVED]

Post autor: zwora »

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
Ostatnio zmieniony pt paź 12, 2018 2:08 pm przez zwora, łącznie zmieniany 1 raz.
OpenOffice 4.1.6, Windows 10 64bit
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: Jan_J »

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.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

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
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: Jan_J »

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
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

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:

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
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.
OpenOffice 4.1.6, Windows 10 64bit
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

Czy ktoś już próbował się w ten sposób łączyć i ma jakiś przykład?
OpenOffice 4.1.6, Windows 10 64bit
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: Jan_J »

Kod: Zaznacz cały

print oParams.sUserName
Wg mnie to oParams powinna mieć pole o nazwie user i wartości pobranej z 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)
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

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
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: Jan_J »

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
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

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.
OpenOffice 4.1.6, Windows 10 64bit
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

Witam,

Udało mi się przejść ten problem:

Zamiast:

Kod: Zaznacz cały

Dim oParams () As New com.sun.star.beans.PropertyValue
powinno być:

Kod: Zaznacz cały

Dim oParams As New com.sun.star.beans.PropertyValue
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:

Kod: Zaznacz cały

Dim oParams As New com.sun.star.beans.PropertyValue
Dim sUserName$
sUserName = "uzytkownik"
AppendProperty(oParams(), "user", sUserName)
I po takim wywołaniu wyskakuje opisane wcześniej ostrzeżenie.
OpenOffice 4.1.6, Windows 10 64bit
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: Jan_J »

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)
zwora
Posty: 45
Rejestracja: pn sty 20, 2014 1:23 pm

Re: Dostęp do BD na zewnętrznym serwerze

Post autor: zwora »

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
OpenOffice 4.1.6, Windows 10 64bit
ODPOWIEDZ