Database to właściwość DAO odwołująca się do bazy danych.
kliknij, aby powiększyć
Za pomocą ten właściwości można w prosty sposób pobierać/dodawać/edytować zestawy rekordów z dowolnej bazy danych.
Np.
Public Sub Bazy_Danych() Dim MojaBaza1 As DAo.Database Dim MojaBaza2 As DAo.Database ’przypisanie zmiennej do bieżącej bazy danych Set MojaBaza1 = CurrentDb ’przypisanie zmiennej do innej bazy danych Set MojaBaza2 = OpenDatabase(„C:\BazaZapas.accdb”) '(…) End Sub
CuurentDb to zmienna obiektowa typu Database , która reprezentuje bazę danych aktualnie otwartą w oknie programu Microsoft Access.
Obiekt DAO.Recordset to obiekt VBA bardzo podobny do obiektu ADO Recordset, ale oparty o inną bibliotekę, ma więc nieco inne metody i właściwości.
Teoretycznie DAO nie jest już wspierany przez Microsoft i można by o nim zapomnieć, ale jest jeden wyjątek. Recordset ADO nie obsługuje pól typu Załącznik – do tego jest niezbędne DAO.
Do skorzystania z Recorset DAO wymagana jest referencja w edytorze VBA (Tools –> References…): Microsoft Office xx.0 Access Database Engine Object Library Ja korzystam pakietu Microsoft Office 2019, więc jest to Microsoft Office 16.0 Access Database Engine Object Library:
kliknij, aby powiększyć
W innych wersjach może być to inny numer biblioteki, ale sama referencja jest wymagana.
kliknij, aby powiększyć
Obiekt DAO ma swoje właściwości i metody, z czego najczęściej stosowane to: WŁAŚCIWOŚCI DAO
W poprzedniej notce opisywałam wstawianie załączników do pola tabeli: Pole typu załącznik
Szybko i sprawnie można w ten sposób wstawić do każdego rekordu związaną z nim grafikę. Jeżeli jednak dla każdego rekordu jest przypisanych więcej załączników i to w różnych formatach plików, lepiej zrobić to inaczej.
Jeżeli w polu typu Załącznik jest kilka różnych plików i w formularzu mamy ustawione wyświetlanie jako ikona – widoczna będzie ikona pierwszego z nich. Jeżeli ustawimy ten formant jako Spinacz – zobaczymy to:
kliknij, aby powiększyć
Widzimy, że są tu 4 załączniki i po kliknięciu w formant, można je zobaczyć:
kliknij, aby powiększyć
W tym przypadku – nazwy załączonych plików wprawdzie wskazują mniej więcej, jaka jest ich zawartość, ale czasem może być to zawodne.
Moim zdaniem lepszym rozwiązaniem jest stworzenie nowej tabeli, tylko z załącznikami, będącej źródłem rekordów dla podformularza.
Wzór takiej tabeli to np.
kliknij, aby powiększyć
Przykład rekordów do jednej z książek:
kliknij, aby powiększyć
Do formularza można wstawić jako podformularza całą tabelę:
kliknij, aby powiększyć
Ja z reguły tworzę tu jednak podformularz ciągły – można lepiej dopasować szerokości, widoczność, kolory itd.
kliknij, aby powiększyć
Jest to metoda bardziej elastyczna, również umożliwia otwieranie/dodawanie/usuwanie załączników.
Pole typu Załącznik to kolumna Tabeli umożliwiająca wstawianie do bazy danych różnego typu plików jako załączników.
Załącznikiem może być dowolny plik graficzny, PDF, plik aplikacji itp. Zostanie on zapisany w tabeli. Choć przy dużej ilości rekordów i wielu dużych załącznikach – może znacznie zwiększyć pojemność bazy danych.
Dodawanie załączników do tabeli w najprostszy sposób to dwukrotne kliknięcie w kolumnie Załącznika, a następnie naciśnięcie przycisku Dodaj.
kliknij, aby powiększyć
Następnie wybieramy plik do wstawienia
Do każdego pola typu Załącznik można wstawić większą ilość załączników, można je też usuwać, otwierać.
Gdy w ten sposób wstawimy do pola plik graficzny – można ustawić wyświetlanie go jako obrazu w formularzu.
W arkuszu właściwości ustawiamy wyświetlanie jako Ikona/Obraz
kliknij, aby powiększyć
Efekt końcowy wygląda tak:
Jest to całkiem dobry sposób na wstawianie pojedynczych obrazów do aplikacji.
W przypadku większej ilości załączników dla każdego rekordu
(i to nie tylko obrazów) stosuję inną metodę. Tworzę osobną tabelę, tam wstawiam załączniki, a następnie w formularzu dla każdego rekordu – podformularz z załącznikami. W te sposób mam szybki dostęp do wszystkich załączników.
No i oczywiście – robię to wszystko kodem VBA.
Wstawianiu obrazów w obrazach poświęcona jest notka: Wstawianie obrazów w formularzu
Opisany tam jest jednak sposób do wstawiania obrazów „stałych”, identycznych dla każdego rekordu, a więc przeznaczonych raczej dla części wspólnych formularza np.nagłówka czy stopki. Chcąc uzależnić wyświetlany obraz od aktualnego rekordu konieczne jest jego powiązanie z źródłem danych formularza.
Załóżmy, że mamy tabelę o takim układzie danych:
W kolumnie Foto oczywiście może być zamieszczony pełna nazwa pliku (czyli wraz z pełną ścieżką), ale ja stosuję w swoich projektach metodę bardziej elastyczną, umożliwiającą przeniesienie całości na inny komputer czy też do innej lokalizacji. bez konieczności aktualizacji adresów w tabeli.
Najczęściej przyjmuję tu zasadę, że katalogiem nadrzędnym jest katalog, w którym znajduje się aplikacja Access. Tworzę w nim folder FOTO (i ewentualnie w nim podkatalogi) i tam umieszczam zdjęcia czy też inne pliki połączone.
W praktyce wygląda to tak.
W formularzu , dla którego źródłem danych jest tabela jw. wstawiam formant Obraz i w arkuszu właściwości jako źródło danych wskazuję Kreatora wyrażeń:
kliknij, aby powiększyć
W kreatorze wyrażeń przechodzę do Funkcje –> Biblioteka(to nazwa moje aplikacji) i z modułu ModuleFunctionPUB wybieram funkcję AdresSG()>
W module ModuleFunctionPUB mam zapisaną funkcję zwracającą adres bieżącej aplikacji Access. Wygląda ona tak:
Public Function AdresSG() ’Adres folderu, w którym znajduje się aktualna aplikacja Access
AdresSG = CurrentProject.Path End Function
Dokładam do tego fragment do podkatalogów, a następnie z pól formularza wybieram Foto czyli nazwę pliku obrazu:
Finalnie – źródłem danych dla tego formantu jest wyrażenie: =AdresSG() & „\Foto\Kategorie\” & [Foto]
Efekt końcowy wygląda tak:
Dla każdego rekordu jest widoczne przypisane do niego zdjęcie. Po przeniesieniu w inne miejsce, jeżeli zostanie zachowany ten sam układ katalogu – nie trzeba zmieniać żadnych linków, gdyż funkcja sama zlokalizuje na dysku położenie obrazu.
Application.CurrentProject to właściwość obiektu Application związana z bieżącym projektem aplikacji Access.
kliknij, aby powiększyć
Ma swoje właściwości i metody, niektóre bardzo często stosowane.
Connection aktywne połączenie (np. przy otwieraniu obiektu Recordset)
FullName pełna nazwa, razem z ścieżką dostępową
Name nazwa
Path adres folderu, w którym znajduje się projekt
W praktyce – używam właściwie tylko tych wymienionych, pozostałe są chyba rzadziej stosowane, choć pewnie też może być warto się im przyjrzeć.
W ramach przykładu – funkcja VBA, którą bardzo często stosuję w swoich projektach, wykorzystując ją do odczytywania połączonych plików (np.zdjęć) lub miejsca, gdzie generowane są np.raporty. Pozwala to na przenoszenie aplikacji i połączonych katalogów w inne miejsca.
Public Function AdresSG() ’Adres folderu, w którym znajduje się aktualna aplikacja Access
AdresSG = Application.CurrentProject.Path ’ lub alternatywnie w wersji skróconej:
AdresSG = CurrentProject.Path End Function
Ponieważ obiekt Application jest obiektem domyślnym VBA, można pominąć to słowo i stosować wersję skróconą. Stosuję.