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

Użytkowanie arkusza kalkulacyjnego

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

Postprzez zwora » Cz wrz 13, 2018 6:10 pm

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 edytowano Pt paź 12, 2018 2:08 pm przez zwora, łącznie edytowano 1 raz
OpenOffice 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez Jan_J » Cz wrz 13, 2018 8:52 pm

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 (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3773
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Postprzez zwora » Pt wrz 14, 2018 6:13 am

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 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez Jan_J » Pt wrz 14, 2018 9:05 am

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 (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3773
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Postprzez zwora » So wrz 22, 2018 7:59 am

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   Rozszerz widokZwiń widok
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 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez zwora » Wt paź 02, 2018 5:32 pm

Czy ktoś już próbował się w ten sposób łączyć i ma jakiś przykład?
OpenOffice 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez Jan_J » Wt paź 02, 2018 8:43 pm

Kod: Zaznacz cały   Rozszerz widokZwiń widok
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 (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3773
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Postprzez zwora » Śr paź 03, 2018 5:22 am

Funkcje, które zaczerpnąłem z poradnika Andrew Ptonyak'a mają postać:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
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 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez Jan_J » Śr paź 03, 2018 10:35 pm

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 (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3773
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Postprzez zwora » Cz paź 04, 2018 6:23 am

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 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez zwora » So paź 06, 2018 7:10 am

Witam,

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

Zamiast:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
Dim oParams () As New com.sun.star.beans.PropertyValue


powinno być:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
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 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm

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

Postprzez Jan_J » So paź 06, 2018 11:20 am

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 (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3773
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Postprzez zwora » Pt paź 12, 2018 2:08 pm

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 3.4.1, Windows 7 SP1 64bit
zwora
 
Posty: 34
Dołączył(a): Pn sty 20, 2014 1:23 pm


Powrót do Calc

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 10 gości