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.
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.
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.
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.
Trzymaj razem / Keep Together
szczegóły
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
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ę”:
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).
właściwościami formantu
dodatkowe informacje
TBLAUTOR;TBLKSIAZKA
TBLKSIAZKA
TBLAUTOR
Wydarzenia
Wykonaj akcję
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.
TBLAUTOR;
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