PROGRAMOWANIE W VBA – MICROSOFT ACCESS
LABORATORIUM 4
W ćwiczeniu tym przygotujesz kod, który będzie włączał i wyłączał wyświetlanie paska menu i pasków narzędzi. Dodatkowo przeprowadzisz defragmentację bazy danych z poziomu kodu.
UWAGA. Pamiętaj o użyciu instrukcji Option Explicit w sekcji deklaracji każdego z tworzonych modułów.
1. Skopiuj do swojego folderu plik Northwind.mdb oraz Metody.mdb znajdujące się w katalogu \Program Files\Microsoft Office\Office\Przykldy.
2. Utwórz w nową bazę danych o nazwie Dao.mdb.
3. Zaimponuj wszystkie tabele (struktura i dane) z pliku \Northwind.mdb
4. Z tego samego pliku zaimponuj kwerendy Sprzedaż wg pracowników i krajów oraz Podsumowania zamówień.
5. Utwórz makro i zachowaj je pod nazwą Puste makro.
UWAGA. Nie wprowadzaj NICZEGO do kolumny Akcja makra. Kolumna Komentarz może także pozostać pusta.
6. Utwórz nowy pusty formularz.
7. Utwórz przycisk polecenia i zmień jego tytuł na Przełącz pasek menu.
8. Dodaj następujący kod do zdarzenia Przy kliknięciu tego przycisku:
If Application.menubar = "Puste makro" Then
Application.menubar = ""
Else
Application.menubar = "Puste makro"
End If
9. Zachowaj formularz jako Ćwiczenie_1 i przełącz go do widoku Formularz.
10. Kliknij kilkukrotnie na przycisku Przełącz pasek menu. Co się dzieje?
1. Dodaj kolejny przycisk polecenia do formularza Ćwiczenie_1 i zmień jego tytuł na Przełącz pasek narzędzi.
2. Dodaj następujący kod do zdarzenia Przy kliknięciu tego przycisku:
If Application.GetOption("Dostepne wbudowane paski narzędzi")
Then
Application.SetOption „Dostepne wbudowane paski narzędzi", _ False
Else
Application.SetOption "Dostępne wbudowane paski narzędzi", _ True
End If
3. Zachowaj formularz i przełącz go do widoku Formularz.
4. Kliknij kilkukrotnie na przycisku Przełącz pasek narzędzi. Co się dzieje?
1. Dodaj kolejny przycisk polecenia do formularza Ćwiczenie_1 i zmień jego tytuł na Defragmentuj Metody.mdb.
2. Dodaj następujący kod do zdarzenia Przy kliknięciu tego przycisku:
DoCmd.Hourglass True
DBEngine.CompactDatabase "C:\...\Metody.MDB"_,"C:\...\Metody.New"
MsgBox "Defragmentacja zakończona!"
DoCmd.Hourglass False
3. Zachowaj formularz i przełącz go do widoku Formularz.
4. Kliknij na przycisku polecenia i poczekaj aż pojawi się okno komunikatu.
5. Uruchom Eksploratora Windows, aby stwierdzić, czy zdefragmentowany plik istnieje.
W ćwiczeniu tym przygotujesz funkcję, która będzie tworzyła nową przestrzeń roboczą i dodawała ją do bieżącej kolekcji. Kod ten dołączysz do przycisku polecenia nowego formularza.
Otwórz bazę danych \Dao.mdb.
Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Utwórz przestrzeń roboczą.
4. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaPrzesterzen As WorkSpace
Dim i As Integer
'Początkowa ilość przestrzeni roboczych w kolekcji.
MsgBox Str(DBEngine.workspaces.Count) &
" - Początkowa ilość _ przestrzeni."
'Utworzenie nowej przestrzeni i dodanie jej do kolekcji.
Set MojaPrzesterzen =
DBEngine.CreateWorkspace("NowaPrzestrzeń", _ "Admin", "") DBEngine.workspaces.Append MojaPrzesterzen
'Końcowa ilość przestrzeni roboczych w kolekcji.
MsgBox Str(DBEngine.workspaces.Count) & _
" - Końcowa ilość przestrzeni."
'Wyświetlenie nazw przestrzeni roboczych w kolekcji.
For i = 0 To DBEngine.workspaces.Count - 1
MsgBox "PrzestrzenieRobocze(" & i & ").
Nazwa: " & _ DBEngine.workspaces(i).Name
Next
5. Zachowaj formularz jako Ćwiczenie_2 i przełącz go do widoku Formularz.
6. Kliknij na przycisku polecenia aby przetestować funkcję.
W tym ćwiczeniu utworzysz procedurę, która umożliwi określenie numeru wersji bazy danych. Jest to użyteczne, gdy chcesz mieć pewność, że pracujesz z najbardziej aktualną wersją bazy danych.
Otwórz bazę danych Dao.mdb.
Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Wyświetl wersje.
4. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database
Dim WerAp As String, WerBD As String
Set MojaBD = DBEngine.Workspaces(0).Databases(0)
WerAp = DBEngine.Version
WerBD = MojaBD.Version
MsgBox "Wersja aparatu obsługi: " & WerAp
MsgBox "Wersja bazy danych: " & WerBD
5. Zachowaj formularz jako Ćwiczenie_3 i przełącz go do widoku Formularz.
6. Kliknij na przycisku polecenia i poczekaj, aż pojawi się okno komunikatu.
7. Jakie informacje wyświetla okno komunikatu?
W tym ćwiczeniu utworzysz procedurę, która będzie z poziomu kodu zmieniać nazwę tabeli.
Otwórz bazę danych Dao.mdb.
Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk przełącznika i zmień jego właściwość Tytuł na Zmień nazwę tabeli.
4. Zmień właściwość Nazwa przycisku na ZmienNazweTabeli.
5. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database
Set MojaBD = DBEngine(0)(0)
'Jeśli przycisk jest wciśnięty to zmień nazwę na AAA.
If Me!ZmienNazweTabeli = -1 Then
MojaBD.TableDefs("Klienci").name = "AAA"
Else
MojaBD.TableDefs("AAA").name = "Klienci"
End If
'Odśwież kolekcję TableDefs.
MojaBD.TableDefs.Refresh
RefreshDatabaseWindow
6. Zachowaj formularz jako Ćwiczenie_4 i przełącz go do widoku Formularz.
7. Kliknij na przycisku Zmień nazwę tabel". Zauważ, że w kontenerze bazy danych nazwa tabeli Klienci zmieniła się na AAA.
8. Kliknij na przycisku Zmień nazwę tabeli po raz drugi. Zauważ, że w kontenerze bazy danych nazwa tabeli AAA zmieniła się na Klienci.
W tym ćwiczeniu przygotujesz procedurę, która będzie odczytywać instrukcję SQL istniejącej kwerendy.
Otwórz bazę danych Dao.mdb.
Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na "Tekst instrukcji SQL".
4. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database
Dim TekstSQL As String
Set MojaBD = DBEngine(0).OpenDatabase("C:\...\Northwind.mdb")
TekstSQL = MojaBD.QueryDefs("Faktury").SQL
MsgBox TekstSQL
5. Zachowaj formularz jako Ćwiczenie_5 i przełącz go do widoku Formularz.
6. Kliknij na przycisku Tekst instrukcji SQL. Co pojawiło się w oknie komunikatu`?
W tym ćwiczeniu przygotujesz funkcję, która będzie przeglądać Recordset w bazie danych, zwracając każdy dziesiąty rekord tego obiektu. Napiszesz także kod, który będzie otwierał Recordset i podawał ile jest w nim rekordów.
I . Otwórz bazę danych Dao.mdb.
2. Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Pokaż każdy dziesiąty rekord.
4. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database, MojZestaw As Recordset,
Dim Nazwa As String, i As Integer
Set MojaBD = DBEngine.Workspaces(0).Databases(0)
Set MojZestaw = MojaBD.OpenRecordset("Klienci", DbOpenTable)
MojZestaw.MoveFirst
i = 1
Do Until MojZestaw.EOF
Nazwa = MojZestaw![NazwaFirmy]
MsgBox i & " - " & Nazwa
MojZestaw.Move 10
i = i + 10
Loop
MojZestaw.Close
5. Zachowaj formularz jako Ćwiczenie_6 i przełącz go do widoku Formularz.
6. Kliknij na przycisku Pokaż każdy dziesiąty rekord. Czy rzeczywiście zobaczyłeś każdy dziesiąty rekord?
1. Otwórz bazę danych Dao.mdb.
2. Otwórz formularz Ćwiczenie_6 w widoku projektu.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Policz rekordy.
Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database, MojZestaw As Recordset, _ Ilosc As Integer
Set MojaBD = DBEngine(0)(0)
Set MojZestaw = MojaBD.OpenRecordset( _
"SELECT * FROM [Klienci] WHERE [Miasto] = 'Londyn ' " )
MojZestaw.MoveLast
Ilosc = MojZestaw.Recordcount
MojZestaw.Close
MsgBox "Ilość rekordów = " & Ilosc
5. Zachowaj formularz i przełącz go do widoku Formularz.
6. Kliknij na przycisku Policz rekordy. Jak wielu klientów mieszka w Londynie?
W ćwiczeniu tym stworzysz pętlę przeglądającą kolejne obiekty typu container, zwracając nazwę i właściwości każdego z obiektów.
Otwórz bazę danych Dao.mdb.
Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Lista obiektów Container i ich właściwości.
4. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database
Dim c As Container, p As Proparty
Dim i As Integer, j As Integer
Set MojaBD = DBEngine(0)(0)
For i = 0 To MojaBD.Containers.Count - 1
Set c = MojaBD.Containers(i)
Debug.Print "CONTAINER: " & c.Name
For j - 0 To c.Properties.Count - 1
Set p = c.Properties(j)
Debug.Print , p.Name & ":", p.Value
Next j
Next i
MsgBox "zrobione! Rezultaty zobaczyć możesz w oknie bezpośrednim."
Zachowaj formularz jako Ćwiczenie_7 i przełącz go do widoku Formularz.
Kliknij na przycisku Lista obiektów Container i ich właściwości.
Obejrzyj zawartość okna bezpośredniego.
W tym ćwiczeniu wykorzystasz DAO do manipulowania niektórymi podstawowymi parametrami tabel, takimi jak relacje między tabelami, pola i indeksy.
1. Otwórz bazę danych Dao.mdb.
2. Otwórz okno Relacje i zauważ, jeżeli pomiędzy tabelami Pracownicy i Zamówienia jest relacji usuń ją.
3. Utwórz nowy, pusty formularz.
4. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Utwórz relację.
5. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaRelacja As Relation
Dim MojaBD As Database
Dim MojePole As Field
Set MojaBD = DBEngine(0)(0)
' Utworzenie nowego obiektu Relation.
Set MojaRelacja = MojaBD.CreateRelation("PracownicyZamówienia")
MojaRelacja.Table = "Pracownicy"
MojaRelacja.ForeignTable = "Zamówienia"
Set MojePole = MojaRelacja.CreateField("IDpracownika")
MojePole.ForeignName = "IDpracownika"
' Zachowanie definicji pola przez dołączenie go do kolekcji
' Relations.
MojaRelacja.Fields.Append MojePole
' Zachowanie definicji relacji przez dołączenie jej do
' kolekcji Relations
MojaBD.Relations.Append MojaRelacja
MsgBox "Relacja została utworzona - sprawdź to w oknie Relacja."
Zachowaj formularz jako Ćwiczenie_8 i przełącz go do widoku Formularz.
Kliknij na przycisku Utwórz relację.
8. Otwórz okno Relacje i zauważ, że pomiędzy tabelami Pracownicy i Zamówienia pojawiła się nowa relacja.
1. Otwórz formularz Ćwiczenie_8 w widoku projektu.
2. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Lista indeksów.
3. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database, MojaTabela As TableDef
Dim i As Integer, MojePola As String, MojaNazwa As String
Set MojaTabela = MojaBD.TableDefs("Pracownicy")
For i = 0 To MojaTabela.Indexes.count - 1
MojaNazwa = MojaTabela.Indexes(i).Name
MojePola = MojaTabela.Indexes(i).Fields
MsgBox "Nazwa indeksu: " & MojaNazwa & Chr(13) & Chr(10) & _ "Pola: " & MojePola
Next
4. Zachowaj formularz i przełącz go do widoku Formularz.
5. Kliknij na przycisku Lista indeksów. Co pojawiło się w oknie komunikatu?
1. Otwórz formularz Ćwiczenie_8 w widoku projektu.
2. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Lista pól.
Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database, MojaTabela As TableDef
Dim i As Integer, MojaNazwa As String, MojTyp As Integer
Set MojaBD = DBEngine(0)(0)
Set MojaTabela = Moja»D.TableDefs("Kategorie")
For i = 0 To MojaTabela.Fields.count - 1
MojaNazwa = MojaTabela.Fields(i).Name
MojTyp = MojaTabela.Fields(i).Type
MsgBox "Nazwa pola: " & MojaNazwa & Chr(13) & Chr(10) & "Typ: " & MojTyp
Next
4. Zachowaj formularz i przełącz go do widoku Formularz.
5. Kliknij na przycisku Lista pól. Jakie nazwy i typy pól zostały wyświetlone? Co oznaczają poszczególne numery typów? Jakie stałe języka VBA odpowiadają tym typom?
W tym ćwiczeniu utworzysz funkcję, która będzie wyświetlała listę parametrów zapytania.
Otwórz bazę danych Dao.mdb.
Utwórz nowy, pusty formularz.
3. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Lista parametrów.
4. Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database, MojeZapytanie As QueryDef
Dim i As Integer, MojaNazwa As String, MojTyp As Integer
Set MojaBD = DBEngine(0)(0)
Set MojeZapytanie = MojaBD.QueryDefs("Sprzedaż wg pracowników i krajów")
For i = 0 To MojeZapytanie.Parameters.count - 1
MojaNazwa = MojeZapytanie.Parameters(i).Name
MojTyp = MojeZapytanie.Parameters(i).Type
MsgBox "Nazwa parametru: " & MojaNazwa & Chr(13) & Chr(10) & "Typ: " & MojTyp
Next
Zachowaj formularz jako Ćwiczenie_9 i przełącz go do widoku Formularz.
Kliknij na przycisku Lista parametrów.
W tym ćwiczeniu utworzysz właściwość zdefiniowaną przez użytkownika. Po wykonaniu tej procedury nie zauważysz właściwie żadnych efektów. Dlatego możesz wykonując tę funkcję wykorzystać pracę krokową.
1. Otwórz bazę danych Dao.mdb i utwórz nowy, pusty formularz.
2. W dowolnym miejscu formularza utwórz przycisk polecenia i zmień jego właściwość Tytuł na Utwórz właściwość zdefiniowaną przez użytkownika.
Dodaj poniższy kod do formularza dla zdarzenia Przy kliknięciu utworzonego przycisku:
Dim MojaBD As Database
Dim MojaWlasciwosc As Property
Set MojaBD = DBEngine.Workspaces(0).Databases(0)
Set MojaWlasciwosc = MojaBD.CreateProperty("Ostatnio0twarty")
'Ustawienie typu danych i wartości nowej właściwości.
MojaWlasciwosc.Type = DB_DATE
MojaWlasciwosc.value = Now
'Dodanie właściwości do kolekcji Properties.
MojaBD.properties.Append MojaWlasciwosc
MsgBox "Dodano właściwość użytkownika Ostatnio0twarty"
4. Zachowaj formularz jako Ćwiczenie_dodatkowe_1 i przełącz go do widoku Formularz.
5. Kliknij na przycisku Utwórz właściwość zdefiniowaną przez użytkownika.
Wykorzystując VBA, utwórz procedurę wyświetlającą w oknie bezpośrednim listę wszystkich tabel, zapytań, formularzy, raportów i modułów bazy danych NorthWind.
Użyj przycisku polecenia do utworzenia relacji jeden_do_wielu pomiędzy tabelami Pracownicy oraz Zamówienia z poziomu VBA. Dodaj drugi przycisk polecenia do kasowania relacji.