Narzędzia użytkownika

Narzędzia witryny


fedora:aplikacje:libreoffice:base

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
fedora:aplikacje:libreoffice:base [2025/04/06 21:17] – [Relacja 1:M (jeden do wielu)] sindapfedora:aplikacje:libreoffice:base [2025/05/08 21:08] (aktualna) – [Makro otwierania i zamykania formularza] sindap
Linia 2: Linia 2:
 ===== Relacje ===== ===== 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.+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) ==== ==== Relacja 1:1 (jeden do jednego) ====
Linia 21: Linia 23:
 **Zastosowanie:** gdy wiele rekordów może być powiązanych z jednym nadrzędnym rekordem (np. mieszkańcy w miejscowości). **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) ==== ==== 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) ==== ==== 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 ===== ===== Tworzenie raportu =====
Linia 86: Linia 103:
  
 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. 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. 
 + 
 +<code sub> 
 +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 
 +</code>
  
  
fedora/aplikacje/libreoffice/base.1743967061.txt.gz · ostatnio zmienione: przez sindap

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki