1. Jak uniknąć utraty danych w bazie:
https://forum.openoffice.org/en/forum/v ... 83&t=17567
2. Szablon podzielonej bazy danych:
https://forum.openoffice.org/en/forum/v ... 83&t=61183
3. Uruchomienie HSQLDB w trybie serwera (dla wielu użytkowników):
https://forum.openoffice.org/en/forum/v ... 85#p257585
https://forum.openoffice.org/en/forum/v ... 50#p298250
4. Do napisania tego posta skorzystam również z informacji zawartych tutaj:
https://wiki.openoffice.org/wiki/FAQ_(Base)#HSQLDB
(1,4) WPROWADZENIE:
BASE nie jest bazą danych i to musi być jasne. Base to interfejs do bazy danych.
Przykładowo weźmy pod uwagę jakieś biuro turystyczne, posiada sporo rożnych danych: ofert wakacyjnych, dane klientów, dane hoteli … więc można powiedzieć, że jest bazą danych. I teraz pytanie czy o osobie tam pracującej można powiedzieć że też jest biurem turystycznym? Nie, po prostu tam tylko pracuje, pomaga zarządzać danymi. Jeśli tego pracownika przydzieliłoby się do innego biura, to dzięki jego wiedzy będzie mógł pracować w nowym miejscu, z pewnymi drobnymi wyjątkami, równie skutecznie. Lećmy dalej z przykładem. Szef postanowił wyjść z biura do klientów, rozejrzał się po rynku i znalazł rozwiązanie, cud techniki: samochodzik marki OpenOffice.org (nawiązuję do wcześniejszych wersji), wyposażonego w maszynę do pisania (Writer), kalkulator (Calc), blok rysunkowy (Draw) a ponadto przenośne biuro (Base) czyli namiocik, składany stolik, krzesła i karton na dokumenty. I to wszystko oczywiście mieści się w bagażniku. Ten namiocik z kartonem stanowi tzw. silnik bazy danych. I w ten sposób pracownik może teraz jechać gdziekolwiek aby otworzyć biuro w dowolnym miejscu.
Mam nadzieję, że to porównanie pomogło zrozumieć zastosowanie BASE, a więc pomaga ono zarządzać danymi: posiada narzędzia do tworzenia zapytań do tabel (SQL), formularzy i raportów odzwierciedlają ce dane zawarte w „silniku bazy”.
W praktyce Base może czytać lub inaczej pracować z różnymi silnikami baz danych (np. PostgreSQL, MySQL , Firebrid ...), a każdy z nich ma swój własny specjalny SQL lub własne funkcje, ale możemy mieć ten sam interfejs graficzny dla formularzy niezależnie od zastosowanego silnika.
AOO i LO standardowo jest wyposażony w silnik, wykonany w JAVA (dlatego base go wymaga): HSQLDB w wersji 1.8. Jest to dość stary silnik i istnieją jego nowsze wersje, lecz AOO i LO wydają się nie być nimi zainteresowani (LO od niedawna proponuje Firebird).
Niestety BASE jest bardzo wrażliwe na zakłócenia. Głównym problemem ze stabilnością, jest to, że cały plik AOO lub LO po zamknięciu jest zapisywany w skompresowanym pliku (takim jak .zip), a po otwarciu jest dekompresowany (w przykładzie odpowiada to rozłożeniu/złożeniu namiotu wraz dokumentami z bagażnika). Taki pojedynczy plik base (zapisany w formacie*.odb) jest tzw.: OSADZONĄ bazą danych. W pewnym momencie (de)kompresji dokument może ulec uszkodzeniu i chociaż zdarza się to czasami również w programie Writer czy też w Calc, w Base występuje niestety znacznie częściej.
Na angielskim forum można znaleźć pewne rozwiązanie zaproponowane przez DCAM, Villeroy i innych, polegające na PODZIELENIU bazy danych. W powyższym przykładzie odpowiadało by to podpięciu do samochodu przyczepki z szafą na dokumenty. W ten sposób odpada cała zabawa z rozkładaniem i składaniem namiotu oraz danych. Zatem podzielona baza danych składa się z dwóch głównych elementów:
1. Z podstawowego pliku, zapisanego w formacie .odb, zawierającego informacje o połączeniu z bazą danych oraz wszelkie zapytania, formularze, raporty i stosowane makra. Ja nazywam go sobie plikiem prezencji (”frontend”).
2. Z plików bazy danych HSQL, którymi są najczęściej cztery oddzielne pliki z rozszerzeniami: *.script, *.properties, *.data, *.backup. Pliki te stanowią zaplecze bazy (”backend”).
Dzięki podzieleniu można również zapewnić jednoczesny dostęp do danych kilku użytkownikom jednocześnie w sieci lub lokalnie – baza danych pracuje w TRYBIE SERWERA.
PS. Wydaje mi się, że już od około dwóch lat używam podzielonej bazy i nie przypominam sobie, żeby wystąpiła na niej jakaś awaria...
Jak utworzyć nową podzieloną bazę danych.
Jest na to kilka sposobów, przedstawię tylko ten który przypadł mi do gustu.
(2) Jeśli w bazie chcesz zastosować nowszy silnik HSQL to proponuję pobrać ten szablon: Split_HSQLDB_2.3.2_Wizard_v3d_pl.odb. Jest to przetłumaczona na język polski i nieznacznie zmieniona przeze mnie wersja pliku dostarczonego przez DACM.
Zaproponowany szablon jest w rzeczywistości dokumentem wykorzystującym zapisane w nim makro do poprawnej konfiguracji podzielonej bazy. Aby działał poprawnie, ten plik radzę umieścić umieścić w zaufanym katalogu (proszę zapoznać się z opracowaniem Jermora dotyczący użytkowania makr w AOO i LO: https://yestok.pl/ooo/y58.php) . Makro początkowo monituje użytkownika o podanie nazwy dla tworzonej bazy danych. Następnie dodaje kopię mechanizmu HSQLDB 2.3.2 do folderu podzielonej bazy danych (podfolder „driver”) i konfiguruje szablon do dostępu do bazy danych dla jednego użytkownika na podstawie bieżącej ścieżki folderu. Po kliknięciu ikony Tabele w Base, nawiązywane jest połączenie z HSQLDB. Silnik automatycznie tworzy nową bazę danych w folderze podzielonej bazy danych (podfolderze „database”).DACM pisze:"Szablon łączy wstępnie zdefiniowany dokument podstawowy (.odb) z popularnym silnikiem HSQLDB 2.3 - łącznie zapewnia jedną z najpotężniejszych i najbardziej elastycznych, wieloplatformowych opcji baz danych dostępnych obecnie na komputery stacjonarne. Najważniejsze funkcje obejmują: nowy kreator tworzenia baz danych; Metoda przeciągnij i upuść zapewnia przenośność bazy danych ; bezproblemowa integracja HSQLDB 2.3.x; oraz poprawka błędu konfiguracji AutoValue w podstawowym interfejsie użytkownika . (…) Podobnie starszy plik „ osadzonej bazy danych ” może zostać przekonwertowany na „podzieloną bazę danych”, jeśli jest to konieczne, aby uniknąć niespodziewanego uszkodzenia danych w programie Base"
Jeśli chodzi o przekonwertowanie starszych baz na podzielone to w dostarczonym szablonie jest biblioteka FreeHSQLDB, trzeba ją całą skopiować do interfejsu OO/LO czyli do „Moich makr” a następnie z modułu FreeHSQLDB uruchomić makro Main. W celu ułatwienia tej procedury wyeksportowałem tą bibliotekę do pliku Wyodrębnij_bazę.otx. Dzięki temu wystarczy teraz kliknąć 2 razy ten plik aby rozpocząć proces instalacji rozszerzenia. Dodatkowo w menu Narzędzia zostanie dodane nowe polecenie „Wyodrębnij osadzone pliki” będące skrótem do makra Main. Wersja w tym rozszerzeniu różni się nieco od tej w szablonie, bo podczas użytkowania oryginalnej wersji natknąłem się na pewne błędy więc postarałem się je usunąć; zmieniłem też nieco interfejs.
Jak używać tego rozszerzenia.
- 1. Uruchom bazę do podzielenia (albo dla bezpieczeństwa kopię), z menu Narzędzia → Wyodrębnij osadzone pliki
2. Kliknij przycisk wyodrębnij
3. Przyciskiem Set wskaż ścieżkę do pliku hsqldb.jar, u mnie znajduje się on:- ◦ dla OO: C:/Program Files (x86)/OpenOffice 4/program/classes/hsqldb.jar
◦ dla LO: C:/Program Files /LibreOffice/program/classes/hsqldb.jar
W tych lokacjach HSQLDB jest w wersji 1.8, ewentualnie możesz podać ścieżkę do nowszej wersji
- ◦ dla OO: C:/Program Files (x86)/OpenOffice 4/program/classes/hsqldb.jar
Jeśli teraz przyjrzysz się wielkości pliku przed podziałem i po stwierdzisz, że praktycznie nic się nie zmieniło. Jest to spowodowane tym, że dane bazy tak naprawdę nie zostały wyodrębnione ale tylko skopiowane do zewnętrznego folderu. Jak go odchudzić: uważam że najwygodniej:
- 1. Pobierz plik mydb.server.odb (nazwę oczywiście można zmienić). Będzie on plikiem front-endu (prezencji);
2. Z menu Narzędzia → Wyodrębnij osadzone pliki
3. Kliknij przycisk ustawienia połączenia
4. Przyciskiem Set wskaż ścieżkę do pliku hsqldb.jar…
5. Przyciskiem Podłącz pliki zaplecza HSQL… wskaż z którą "wyodrębnioną" bazą chcesz się połączyć, trzeba wskazać ścieżkę do folderu z plikami bazy, wskazać plik *.script
6. Uruchom oryginalną bazę danych, przeciągnij i upuść wszystkie kwerendy, formularze, raporty ze starej bazy do nowej, w razie konieczności skopiuj wszystkie makra ze starej bazy.
7. Zapisz zmiany, plik powinien być znacznie ”chudszy”.
Na początku wszystko działa dobrze, można tworzyć nowe tabele, z auto numerycznym polem kluczem, można tworzyć zapytania, formularze raporty… Gdzie zatem tkwi problem? Właśnie w mechanizmie tworzenia tabel. W nowo utworzonej tabeli auto numeryczne pole NIE BĘDZIE Z AUTOPRZYROSTEM a dodatkowo NIE MA MOŻLIWOŚCI EDYCJI PÓL TABEL (przynajmniej prostego), będzie możliwość dodania nowego pola, ale poprawić starego już nie. Wszelkie zmiany w strukturze tabeli musi odbywać się przy pomocy instrukcji SQL. Aby naprawić automatyczną numerację z panelu tabeli, z menu Narzędzia wybierz> SQL:
- • Jeżeli używasz HSQLDB w wersji 1.8 do okna wpisz polecenie:
• Jeżeli używasz HSQLDB w wrsji 2.3:
Kod: Zaznacz cały
ALTER TABLE "NazwaTabeli" ALTER COLUMN "NazwaKolumnyID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1) PRIMARY KEY
po poleceniu SHUTDOWN COMPACT należy zamknąć bazę i uruchomić ponownie.Kod: Zaznacz cały
ALTER TABLE "NazwaTabeli" ALTER COLUMN "NazwaKolumnyID" INT GENERATED BY DEFAULT AS IDENTITY SHUTDOWN COMPACT
• Jeśli chcesz zresetować klucz podstawowy z określonego numeru np. 100, trzeba użyć takiego koduKod: Zaznacz cały
ALTER TABLE "NazwaTabeli" ALTER COLUMN "NazwaKolumnyID" RESTART WITH 100