DAO Recordset

Recordset to właściwość DAO związana z zestawem rekordów.  

kliknij, aby powiększyć

Jest to jedna z najważniejszych obiektów do obsługi bazy danych z poziomu kodu VBA. 

Ma też swoje właściwości i metody:

WŁAŚCIWOŚCI

METODY

– sukcesywnie będą się tu pojawiać linki do wpisów poświęconych najczęściej stosowanym


kawa dla marzateli

A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

DAO Database

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.


kawa dla marzateli

A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Obiekt DAO Recordset

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

METODY DAO

Sukcesywnie będą się tu pojawiać linki do notek im poświęconym. 


kawa dla marzateli

A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Podformularz z załącznikami

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. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Pole typu załącznik

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. 

To już jednak tematy na kolejne notki. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Wstawianie połączonych obrazów w rekordach formularza

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. 

      •  

 

 

 

CurrentProject czyli bieżący projekt

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ę. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela