Narzędzia użytkownika

Narzędzia witryny


fedora:aplikacje:libreoffice:base

LibreOffice Base

Relacje

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.

Relacja 1:1 (jeden do jednego)

Każdy rekord w tabeli A ma dokładnie jeden odpowiadający rekord w tabeli B i odwrotnie.

Przykład:

  • uzytkownicy (id, imie, nazwisko)
  • profile (id, uzytkownik_id, adres, telefon)

Zastosowanie: gdy dodatkowe dane są opcjonalne i rzadko używane.

Relacja 1:M (jeden do wielu)

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:

  • miejscowosci (id, nazwa)
  • mieszkancy (id, imie, nazwisko, miejscowosc_id)

Zastosowanie: gdy wiele rekordów może być powiązanych z jednym nadrzędnym rekordem (np. mieszkańcy w miejscowości).

Relacja M:1 (wiele do jednego)

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 miejscowosc_id w mieszkancy może mieć wielu mieszkańców.
  • To po prostu perspektywa tabeli mieszkancy w relacji 1:M.

Relacja M:N (wiele do wielu)

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:

  • uczniowie (id, imie, nazwisko)
  • przedmioty (id, nazwa)

Tabela pośrednia: uczniowie_przedmioty (uczen_id, przedmiot_id)

Zastosowanie: np. uczniowie zapisani na wiele przedmiotów.

Tworzenie raportu

Opcja "Trzymaj razem"

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.

Kroki do utworzenia nowej grupy w raporcie

1. Otwórz raport w trybie edycji:

  1. Wybierz raport w sekcji „Raporty” i kliknij „Edytuj”.

2. Utwórz nową grupę:

  1. Wybierz zakładkę „Raport”.
  2. Kliknij na „Wstaw grupę”.

3. Wybierz pole do grupowania:

  1. Wybierz pole, które chcesz użyć do grupowania (np. ID rekordu, jeśli jest unikalny dla każdego rekordu).
  2. Upewnij się, że opcja Trzymaj razem jest zaznaczona dla tej nowej grupy.

4. Przenieś sekcję szczegółów do nowej grupy:

  1. Upewnij się, że sekcja szczegółów jest częścią nowo utworzonej grupy.
  2. Sprawdź, czy wszystkie dane, które mają być utrzymywane razem, znajdują się w tej sekcji.

Przykład

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.

Krok 1: Otwórz raport w trybie edycji

- Otwórz swój raport w trybie edycji.

Krok 2: Utwórz nową grupę

1. Wybierz zakładkę „Raport”:

  1. Przejdź do zakładki „Raport”.

2. Kliknij „Wstaw grupę”:

  1. Kliknij na przycisk „Wstaw grupę”.

3. Wybierz pole do grupowania:

  1. Wybierz pole, które identyfikuje unikalnie każdy rekord (np. ID rekordu).
  2. Upewnij się, że zaznaczona jest opcja „Trzymaj razem” dla tej grupy.

Krok 3: Przenieś sekcję szczegółów do nowej grupy

1. Przenieś sekcję szczegółów:

  1. Upewnij się, że wszystkie elementy, które mają być utrzymywane razem, znajdują się w sekcji szczegółów nowej grupy.

Krok 4: Sprawdź i wygeneruj raport

1. Zapisz zmiany:

  1. Zapisz zmiany w raporcie.

2. Wygeneruj raport:

  1. Sprawdź, czy sekcje szczegółów są trzymane razem na jednej stronie zgodnie z oczekiwaniami.

Podsumowanie

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.

Formularze

Makro otwierania i zamykania formularza

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
fedora/aplikacje/libreoffice/base.txt · ostatnio zmienione: 2025/05/08 21:08 przez sindap

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki