W poprzednim artykule o pracy z wykresami i wykresami, poznaliśmy już grafikę biznesową i kody kreskowe. Teraz nadszedł czas, aby utrudnić sobie zadanie i popracować z różnymi źródłami danych. Większość raportów opiera się zazwyczaj na danych pochodzących z baz danych. Aby uzyskać dostęp do tych danych Lazarus dostarcza potężne mechanizmy, które są wykorzystywane przez FastReport.
Komponenty dostępu do danych
Odnosi się to do komponentów w zakładce DataAccess, które mogą służyć jako źródła danych dla raportu. Do tego celu można wykorzystać dowolny komponent następnik TDataSet.
Oprócz dostępu do danych zdefiniowanych w projekcie, FastReport pozwala na tworzenie nowych komponentów w trybie run-time. Zasady tworzenia komponentów dostępu do danych w naszej firmie są bardzo podobne do tych stosowanych w środowisku Lazarus - nakładamy komponent na formularz i konfigurujemy jego właściwości w inspektorze obiektów. Funkcjonalność połączeń run-time jest nieco bardziej ograniczona w wyborze formatów baz danych, dlatego w chwili pisania tego artykułu w run-time można tworzyć jedynie DBF i SqLite3.
Chodzi o komponenty w zakładce DataAccess, które wykorzystują komponent konektor TfrxDBDataSet z zakładki FastReportn do podłączenia tabeli lub innego źródła danych do zespołu. Komponent ten działa jako pośrednik pomiędzy źródłem danych a rdzeniem FastReport. Komponent jest odpowiedzialny za nawigację po rekordach i dostęp do pól. Dzięki temu można uniknąć wiązania rdzenia FastReport z jakąkolwiek biblioteką dostępu do danych.
FastReport może pracować jednocześnie z BDE i każdą inną biblioteką, lub w ogóle pobierać dane ze źródła niezwiązanego z bazą danych, jak np. tablica lub plik.
Komponent TfrxDataSet został zaprojektowany do pracy ze źródłami danych i należy zwrócić uwagę na jego uniwersalność. Może on korzystać z wszystkich połączeń odziedziczonych po TDataSet. A jest to BDE, CVS i zdecydowana większość innych bibliotek! Do pracy z innymi źródłami danych (tablica, plik, itp.) służy komponent TfrxUserDataSet.
Aby połączyć komponent TfrxDBDataSet ze źródłem danych, musi być skonfigurowana jedna z opcji:
- Właściwość DataSet, która łączy się bezpośrednio z tabelą lub zapytaniem.
- Właściwość DataSource, która łączy się z komponentem TDataSource.
Obydwie metody połączenia są równoważne, tylko pierwsza z nich robi to bez komponentu TDataSource.
Aby komponent i związane z nim dane były dostępne w raporcie, należy jednoznacznie określić, które źródła danych będą wykorzystywane w raporcie. W projektancie FastReport wybierz pozycję menu "Raport/Dane..." i w oknie, które się pojawi zaznacz pola przy wymaganych źródłach.
Opis komponentów w projektancie FastReport
Komponent TfrxDBFTable jest przeznaczony do organizacji dostępu do tabeli bazy danych .dbf i posiada następujące właściwości:
- FilePath określa ścieżkę do folderu bazy danych.
- TableName przypisuje nazwę bazy danych. Wybierając bazę danych, zmienisz również ścieżkę dostępu.
- FieldAliases umożliwia określenie własnych nazw pól.
- Filtr zawiera wyrażenie do filtrowania rekordów.
- Filtered określa, czy zastosować filtr.
- IndexFieldNames przechowuje nazwy pól, które tworzą indeks.
- IndexName określa nazwę indeksu wtórnego.
- MasterFields zawiera pola związane z głównym zbiorem danych.
- Master jest tożsamy z głównym zbiorem danych.
- UserName określa Alias (nazwę użytkownika) zbioru danych.
Przypisanie właściwości komponentu jest takie samo jak właściwości TDbf w Lazarusie. Aby podłączyć komponent do tabeli w bazie danych, wystarczy wypełnić właściwość TableName. Otwórz tabelę poprzez ustawienie Active := True.
Edytor właściwości FieldAliases pozwala wybrać pola, które będą dostępne podczas dostępu do tabeli oraz ustawić własne nazwy dla każdego pola i całej tabeli.
Edytor MasterFields używany jest do tworzenia relacji master-detail między dwoma tabelami. Aby połączyć dwie tabele relacją master-detail w tabeli podrzędnej, określ tabelę nadrzędną we właściwości Master i wywołaj edytor MasterFields. Jeśli tabela posiada indeksy drugorzędne, najpierw skonfiguruj właściwość IndexName.
Edytor ten pozwala na wizualne powiązanie pól nadrzędnych i szczegółowych zestawów danych. Gdy zestawy są połączone relacją nadrzędny-szczegółowy, zawartość zestawu szczegółowego jest filtrowana podczas nawigacji po zestawie nadrzędnym, tak aby zawierała tylko rekordy, które są istotne dla bieżącego rekordu zestawu nadrzędnego.
Aby połączyć pola zestawu należy wybrać pole z listy po lewej stronie (zestaw szczegółowy), następnie pole z listy po prawej stronie (zestaw główny) i kliknąć przycisk "Dodaj". Spowoduje to przeniesienie mapowania pola na dolną listę. Aby wyczyścić dolną listę, użyj przycisku "Wyczyść". Należy pamiętać, że pola, które mają być połączone muszą być tego samego typu i być kluczowe.
Ale w samym Lazarusie te właściwości nie działają z selekcjami (sortowanie i filtrowanie Master-Detail) dla komponentów TDbf, a ponieważ używamy tego komponentu, nie działa to również dla nas.
Komponent TfrxLazSqliteQuery jest przeznaczony do wykonywania zapytań SQL do bazy danych przy użyciu SqLite3 i posiada następujące właściwości:
- Database określa nazwę połączenia z bazą danych (domyślnie jest to zawsze "sqlLite").
- FieldAliases umożliwia określenie własnych nazw pól.
- Filtr przechowuje wyrażenie do filtrowania rekordów.
- Filtered określa, czy zastosować filtr.
- Master jest tożsamy z Master dataset.
- Params wyświetla listę parametrów zapytania.
- SQL zawiera tekst zapytania.
- UserName ustawia alias (nazwę użytkownika) zbioru danych.
- IgnoreDupParams - jeśli true to nazwy parametrów zapytania nie będą duplikowane w edytorze parametrów.
Właściwość SQL posiada swój własny edytor do wypełniania zapytań SQL:
Właściwość Params również posiada swój własny edytor. Jest on dostępny, jeśli tekst zapytania zawiera parametry.
Parametr może być dwojakiego rodzaju: jeden przypisany ze zbioru danych głównych i drugi z określoną wartością, gdzie wartością może być stała, odwołanie do zmiennej lub właściwość obiektu.
W przypadku, gdy parametr jest pobierany z głównego zbioru danych, musi być skonfigurowana właściwość TfrxLazSqliteQuery.Master. Zbiór danych musi zawierać pole o takiej samej nazwie jak parametr. Określanie typu i wartości parametru nie jest konieczne.
Komponent TfrxLazSqliteDataBase służy do łączenia się z bazą danych SqLite3. Jego przeznaczenie jest podobne do komponentów TSQLite3Connection i TSqlTransaction, a posiada następujące właściwości:
- Connected - gdy True jest aktywne, połączenie jest włączone.
- DatabaseName pozwala wybrać nazwę bazy danych.
- LoginPrompt określa, czy użytkownik musi zostać poproszony o podanie hasła podczas łączenia się z bazą danych. Jeśli LoginPrompt = False, wówczas nazwa użytkownika oraz hasło muszą być podane w łańcuchu połączenia.
Tworzenie raportów z dostępem do bazy danych
Rozważmy zbudowanie prostego raportu, który zawiera komponenty dostępu do danych, jako przykładu użyjemy demonstracyjnej bazy danych LDemo.
Na początek stwórzmy projekt, z którym będziemy przeprowadzać nasze eksperymenty. Utwórz nowy projekt w Lazarusie i umieść w nim na formularzu komponenty TfrxReport, TfrxDesigner, TfrxDialogControls, TfrxDBDataset, TDbf.
Skonfiguruj połączenie z bazą danych. W tym celu należy odnaleźć właściwość TableName dla Dbf1 i w oknie dialogowym wybrać plik bazy danych - wszystko z rozszerzeniem .dbf będzie działać. Następnie ustaw właściwość frxDBDataset1 DataSet na "Dbf1".
Następnie dodaj przycisk do formularza i wpisz w OnClick następujący kod:
1 2 3 4 |
procedure TForm1.Button1Click(Sender: TObject); begin frxReport1.DesignReport; end; |
Pamiętaj, aby zezwolić na tworzenie wątków dla projektu linuksowego. Zostało to opisane w artykule dotyczącym instalacji. Po tym, skompiluj i uruchom projekt. Nic więcej nie jest wymagane do utworzenia projektanta raportów dla użytkownika końcowego.
Po kliknięciu na Projekt, projektant otwiera się z pustym raportem. Rozważ zbudowanie prostych raportów w tym środowisku. Przy okazji, w tym momencie wiesz już, jak podłączyć bazy danych do FR z poziomu Lazarusa.
Prosty raport typu "Lista".
Będziemy teraz wyprowadzać dane z jednej tabeli bazy danych już przy użyciu FR w trybie runtime. Wykonaj następujące kroki, aby zbudować raport:
- Kliknij przycisk "Nowy raport" na pasku narzędzi kreatora. FastReport utworzy pusty raport zawierający strony "Kod", "Dane", "Strona1".
- Przełącz się na stronę "Dane" i umieść na niej komponent "Tabela DBF":
- Wybierz bazę danych, która ma zostać podłączona. W tym celu w Object Inspector ustaw właściwość TableName, wybierając plik customer.dbf z projektu demo.
- Aby połączyć Level 1 Data bank z tabelą, kliknij na nim dwukrotnie i wybierz naszą tabelę w oknie, które się otworzy. Następnie przeciągnij i upuść żądane pola z okna Data Tree na arkusz raportu. Nasz raport będzie wyglądał tak jak poniżej:
Aby obejrzeć raport wynikowy, kliknij na przycisk "Podgląd" na pasku narzędzi.
Przydatne opcje obsługi danych
Zakładka Dane nie jest przeznaczona wyłącznie dla komponentów dostępu do danych. Używając obiektów Tekst i Rysunek, można umieszczać etykiety objaśniające i rysować proste diagramy, jak pokazano na poniższym rysunku: