Ogólnie w bazach relacyjnych występują cztery podstawowe typy relacji między tabelami. Znajomość sposobu działania tych relacji da możliwość użytkowania LO Base. Znając konstrukcje tych czterech typów relacji (1:1, 1:M, M:1, M:N), możesz stworzyć praktycznie każdą strukturę bazy danych!
Bazy relacyjne działają na tych fundamentalnych zasadach, a bardziej skomplikowane modele to po prostu kombinacje tych relacji.
Każdy rekord w tabeli A ma dokładnie jeden odpowiadający rekord w tabeli B i odwrotnie.
Przykład:
Zastosowanie: gdy dodatkowe dane są opcjonalne i rzadko używane.
Jeden rekord w tabeli A może być powiązany z wieloma rekordami w tabeli B, ale każdy rekord w B odnosi się tylko do jednego rekordu w A.
Przykład:
Zastosowanie: gdy wiele rekordów może być powiązanych z jednym nadrzędnym rekordem (np. mieszkańcy w miejscowości).
To właściwie to samo co 1:M, tylko patrzymy z drugiej strony. Każdy rekord w tabeli B należy do jednego rekordu w tabeli A.
Przykład:
Jeden rekord w tabeli A może być powiązany z wieloma rekordami w tabeli B, a jeden rekord w tabeli B może być powiązany z wieloma rekordami w tabeli A.
Przykład:
Tabela pośrednia: uczniowie_przedmioty (uczen_id, przedmiot_id)
Zastosowanie: np. uczniowie zapisani na wiele przedmiotów.
Opcja Trzymaj razem / Keep Together
nie działa zgodnie z oczekiwaniami dla sekcji szczegóły
i że utworzenie nowej grupy w oparciu o rekord rozwiązuje problem.
W takim przypadku możemy przejść przez kroki tworzenia nowej grupy w raporcie LibreOffice Base, która zagwarantuje, że sekcje szczegółów zostaną razem.
1. Otwórz raport w trybie edycji:
2. Utwórz nową grupę:
3. Wybierz pole do grupowania:
Trzymaj razem
jest zaznaczona dla tej nowej grupy.4. Przenieś sekcję szczegółów do nowej grupy:
Załóżmy, że masz raport, który wyświetla szczegóły transakcji. Chcesz, aby wszystkie szczegóły dotyczące pojedynczej transakcji były trzymane razem na jednej stronie.
- Otwórz swój raport w trybie edycji.
1. Wybierz zakładkę „Raport”:
2. Kliknij „Wstaw grupę”:
3. Wybierz pole do grupowania:
1. Przenieś sekcję szczegółów:
1. Zapisz zmiany:
2. Wygeneruj raport:
Tworzenie nowej grupy w oparciu o unikalne pole (np. ID rekordu) i korzystanie z opcji „Trzymaj razem” w tej grupie to skuteczny sposób na zapewnienie, że dane w sekcji szczegółów są trzymane razem na jednej stronie. Dzięki temu rozwiązaniu możesz skutecznie zarządzać układem raportu, unikając niepożądanych podziałów danych na różne strony.
Przydatne jeżeli chcemy pod przyciskiem utworzyć akcje zamknięcie aktualnie otwartego formularza a jednocześnie otworzenie nowego. Po dodanie skryptu pod właściwościami formantu
przycisku w polu dodatkowe informacje
wpisujemy TBLAUTOR;TBLKSIAZKA
. W tym przypadku zostanie zamknięty formularz TBLKSIAZKA
a następnie otwarty formularz TBLAUTOR
. W zakładce Wydarzenia
i polu Wykonaj akcję
wybieramy nasze makro Standard.Module1.OpenAndCloseForm_FromTag (document, Basic)
.
Działanie to jest przydane przy wypełnianiu danych tabel z relacją wiele do wielu.
Jeżeli chcemy pozostawić otwarty formularz TBLKSIAZKA
w polu dodatkowe informacje
wystarczy wpisać TBLAUTOR;
i pominąć nazwę zamykanego formularza.
Poniższe makro działa uniwersalnie na wszystkie formularze.
Sub OpenAndCloseForm_FromTag(oEvent As Object) Dim oButton As Object Dim sTagContent As String Dim sTargetFormName As String Dim sFormToCloseName As String Dim oFormToOpen As Object Dim oFormToClose As Object ' Pobierz zawartość pola Etykieta danych (Tag) oButton = oEvent.Source.Model sTagContent = Trim(oButton.Tag) If sTagContent = "" Then MsgBox "Nie podano nazw formularzy w polu 'Etykieta danych'." Exit Sub End If ' Podziel dane z pola Tag wg średnika Dim aParts() As String aParts = Split(sTagContent, ";") If UBound(aParts) < 0 Then MsgBox "Brak poprawnych nazw formularzy w polu 'Etykieta danych'." Exit Sub End If sTargetFormName = Trim(aParts(0)) ' formularz do otwarcia If UBound(aParts) >= 1 Then sFormToCloseName = Trim(aParts(1)) ' formularz do zamknięcia Else sFormToCloseName = "" ' brak drugiego formularza End If ' Otwórz docelowy formularz On Error GoTo OpenError oFormToOpen = ThisDatabaseDocument.FormDocuments.getByName(sTargetFormName) oFormToOpen.open On Error GoTo 0 ' Zamknij formularz, jeśli podano jego nazwę If sFormToCloseName <> "" Then On Error GoTo CloseError oFormToClose = ThisDatabaseDocument.FormDocuments.getByName(sFormToCloseName) oFormToClose.close(True) On Error GoTo 0 End If Exit Sub OpenError: MsgBox "Nie udało się otworzyć formularza: " & sTargetFormName Resume Next CloseError: MsgBox "Nie udało się zamknąć formularza: " & sFormToCloseName Resume Next End Sub