relacyjne bazy danych wykład x
DESCRIPTION
Relacyjne Bazy Danych wykład X. Język aplikacji baz danych – Visual Basic. Zostaną wprowadzone podstawowe pojęcia takie jak procedura , moduł , moduł klasy, zdarzenie i obsługa błędów. Procedury - PowerPoint PPT PresentationTRANSCRIPT
1opr. Lech Banachowski, Jan Wierzbicki
Relacyjne Bazy Danychwykład X
2opr. Lech Banachowski, Jan Wierzbicki
Język aplikacji baz danych – Visual Basic
Zostaną wprowadzone podstawowe pojęcia takie jak procedura, moduł, moduł klasy, zdarzenie i obsługa błędów.
3opr. Lech Banachowski, Jan Wierzbicki
Procedury
Procedury są podstawą programowania aplikacji bazodanowych
MS Access w ramach paradygmatu programowania
zdarzeniowego. Oto ich cechy: •Są często wiązane ze zdarzeniami interfejsu użytkownika jak: •naciśnięcie przycisku na formularzu, •zmiana wartości w polu tekstowym formularza, •otwarcie lub zamknięcie formularza, •drukowanie raportu, •początkowe otwarcie bazy danych, itd. •Każda powtarzająca się rutynowa czynność, w szczególności
każda, którą można wykonać za pomocą opcji znajdujących się
we wbudowanych menu, nadaje się do zautomatyzowania za
pomocą procedury.
4opr. Lech Banachowski, Jan Wierzbicki
Na formularzu można umieścić zbiór przycisków, po których
naciśnięciu użytkownik uzyskuje:•wyświetlenie tekstu pomocy; •wyświetlenie innego formularza; •zamknięcie danego formularza; •wydrukowanie zawartości formularza; •wyświetlenie następnego (poprzedniego) rekordu, przejście do
pierwszego, ostatniego lub nowego rekordu; •wykonanie obliczeń i wyświetlenie wyniku w polu
niezwiązanym; •wykonanie kopii zabezpieczającej bazy danych na dyskietkę; •przeniesienie danych do Worda, Excela lub innej bazy danych.
5opr. Lech Banachowski, Jan Wierzbicki
Visual Basic for Applications (w skrócie VBA) jest
językiem programowania dla aplikacji systemu Microsoft
Office będący podzbiorem języka Visual Basic. Oto jego
cechy:•służy do powiązania obiektów bazy danych w jedną spójną
aplikację; •zawiera standardowe konstrukcje programistyczne jak If ...
Then ... Else, For, Case, procedury, zmienne; •stosuje dwa typy procedur: •funkcje (Function) - zwracające wartość; mogą być
używane w wyrażeniach jak również jako wartości
właściwości zdarzeń; •podprogramy (Sub) - nie zwracające bezpośrednio
wartości; mogą występować jako procedury zdarzeń w
formularzach i raportach.
6opr. Lech Banachowski, Jan Wierzbicki
Moduł jest zbiorem deklaracji i definicji procedur języka VBA
przechowywanych razem jako całość.•Moduł może zawierać zarówno procedury zdarzeń jak i zwykłe
nazwane procedury. •Są dwa rodzaje modułów: •moduły klas w tym: • moduły klas obiektów MS Access jak formularze i raporty, • moduły klas definiujące niezależne obiekty. •moduły ogólne - nie związane z żadnym obiektem. •Procedury typu Public mogą być wywoływane w dowolnym
miejscu aplikacji (opcja domyślna). •Procedury typu Private są prywatne dla danego modułu (w tym
modułu formularza i raportu) - nie można ich używać spoza
modułu - wszystkie procedury zdarzeń są prywatne.
7opr. Lech Banachowski, Jan Wierzbicki
Typy zmiennych: •lokalne dla procedury, deklarowane lokalnie w procedurze
jako Dim, •lokalne dla modułu, deklarowane jako Private w module
(opcja domyślna), •globalne, deklarowane jako Public w module - dostęp do
nich jest możliwy w całej aplikacji.
8opr. Lech Banachowski, Jan Wierzbicki
Typy danych dla zmiennych
Access Visual BasicWartość domyślna
Text String ""
NumberInteger, Long, Double, Single 0
Currency Currency 0
Yes/No Boolean False
Date/Time Date 30.12.1899
Specjalny typ danych Visual Basic - Variant - oznacza dowolny typ wartości.
9opr. Lech Banachowski, Jan Wierzbicki
Domyślnie wszystkie argumenty przy wywoływaniu
procedury są przekazywane metodą przez referencję.
Dzięki temu w kodzie procedury operujemy na rzeczywistej
zmiennej, którą przekazujemy jako parametr.
Alternatywnie można przekazywać argument przy
wywoływaniu procedury metodą przez wartość –
poprzedzając w deklaracji procedury nazwę parametru
słowem kluczowym ByVal. Przy wywołaniu oblicza się
wartość argumentu i przekazuje do kodu procedury właśnie
tę wartość. Jeśli argumentem jest zmienna, wartość tej
zmiennej nie ulega zmianie przy wykonywaniu kodu.
10opr. Lech Banachowski, Jan Wierzbicki
Przykład 1Typowym zadaniem programistycznym jest obliczanie pierwiastka kwadratowego z liczby nieujemnej. Oto jego zapis w postaci funkcji Visual Basic.
Function SquareRoot (X As Double) As Double Dim Msg As String Select Case Sgn(X) ' Oblicz znak argumentu. Case 1 ' OK jeśli dodatni. SquareRoot = Sqr(X) Exit Function Case 0 ' Powiadom użytkownika jeśli 0. Msg = "Przekazana wartość to 0." Case -1 ' Powiadom użytkownika jeśli mniejsze niz 0. Msg = "Niedozwolona liczba." End Select MsgBox Msg ' Wyświetl komunikat MsgEnd Function
11opr. Lech Banachowski, Jan Wierzbicki
Przykład 2 Pokażemy na tym przykładzie deklaracje i definicje modułu. Opcje:
•Option Compare Database - użycie metody z bazy danych w porównaniach; •Option Explicit - wymagane jest deklarowanie zmiennych;
są zwykle domyślnie przyjmowane przez system.
12opr. Lech Banachowski, Jan Wierzbicki
Option Compare DatabaseOption Explicit------- Private licznik As Integer 'Zmienna lokalna Public pokaż As Integer 'Zmienna globalna-------- Sub Zeruj() 'Procedura globalna licznik = 0 pokaż = licznikEnd Sub------- Sub Dodaj() 'Procedura globalna licznik = licznik + 1 pokaż = licznik MsgBox licznik, , "LICZNIK"End Sub
13opr. Lech Banachowski, Jan Wierzbicki
W MS Access jest dostęny edytor kodu Visual Basic (Visual
Basic Editor) – zawierający środowisko uruchamiania kodu
VBA.
Okno analizy programu (Immediate Window) – uruchamiane
przez sekwencję klawiszy CTRL-G lub z menu Widok "View
-> Immediate Window" - daje możliwość wykonywania kodu
(instrukcji, metod, funkcji i procedur) oraz sprawdzania
wartości wyrażeń, pól i właściwości – pisząc w pojedynczym
wierszu np.
? Licznik
gdzie licznik jest zmienną, której wartość chcemy wypisać.
14opr. Lech Banachowski, Jan Wierzbicki
•Jest możliwość przerwania działania funkcji lub procedury przez
ustawienie w kodzie punktu przerwania (breakpoint) – "Debug ->
Toggle Breakpoint" (F9). • Można też wyświetlić - z menu Widok (View): •nawigator po klasach bieżącego projektu (Project Explorer) oraz •nawigator po klasach zarejestrowanych bibliotek jak Access,
VBA (Object Browser).
Na ogół jednej klasie odpowiada dokładnie jeden obiekt tej klasy
(obiekt klasy – class object).
15opr. Lech Banachowski, Jan Wierzbicki
Przykład 3 Sprawdzanie, czy dany formularz jest otwarty w widoku Formularz - rozwiązanie używające standardowej funkcji SysCmd.
Function Otwarty(ByVal Mój As String) As Integer' SysCmd - czy formularz jest otwarty Otwarty = False If SysCmd(acSysCmdGetObjectState,acForm,Mój) <> 0 Then ' CurrentView - czy jest otwarty w widoku Formularz If Forms(Mój).CurrentView <> 0 Then Otwarty = True End IfEnd Function
16opr. Lech Banachowski, Jan Wierzbicki
Zwróćmy uwagę na to, że odróżniamy klasę danego
formularza łącznie z arkuszem jego właściwości od
konkretnych jego wcieleń widocznych na ekranie, na
których możemy wykonywać operacje w kodzie VBA.
Wcielenie to nazywamy obiektem danego formularza lub w
skrócie po prostu formularzem. Możemy więc powiedzieć,
że otwarte formularze są obiektami klas swoich formularzy.
Do obiektu formularza o nazwie Pracownicy można się
odwoływać w następujący sposób:•Forms![Pracownicy] •Forms("Pracownicy") •Forms(numer) gdzie numer jest numerem
przyporządkowanym danemu formularzowi w sesji.
17opr. Lech Banachowski, Jan Wierzbicki
Używając dostępu kropkowego możemy odwoływać się do
właściwości obiektu formularza a także do jego metod np.•Forms![Pracownicy].Caption zwraca tytuł formularza, •Forms![Pracownicy].SetFocus jest metodą, której
wykonanie przenosi fokus do tego formularza.
Wykrzyknik ! oznacza wybór elementu z kolekcji. Np. •Forms![Pracownicy] - wybór formularza z kolekcji
wszystkich formularzy, •Forms![Pracownicy]![Nazwisko] - wybór pola Nazwisko z
kolekcji wszystkich obiektów związanych z formularzem
Pracownicy.
18opr. Lech Banachowski, Jan Wierzbicki
PROCEDURA ZAMYKAJĄCA AUTOMATYCZNIE PRZY ZAMYKANIU DANEGO FORMULARZA DRUGI OTWARTY FORMULARZ, np. formularz Książki Private Sub Form_Close()If SysCmd(acSysCmdGetObjectState, acForm, "KSIAZKI") <> 0 ThenDoCmd.Close acForm, "KSIAZKI"End IfEnd Sub
sprawdza czy dany formularzjest otwarty
19opr. Lech Banachowski, Jan Wierzbicki
Reasumując:•wykrzyknik oznacza wybór elementu z kolekcji
elementów, •kropka oznacza wybór właściwości obiektu lub kolekcji.
Zapis Forms![Pracownicy]![Nazwisko] oznacza także
domyślnie wartość pola tekstowego Nazwisko czyli
konkretne nazwisko – alternatywnie można używać pełnej
notacji:
Forms![Pracownicy]![Nazwisko].Value
Przy wpisywaniu do pola tekstowego lub listowego,
bieżącą wartość – jeszcze nie zapisaną do bazy danych –
uzyskuje się przy użyciu:
Forms![Pracownicy]![Nazwisko].Text
20opr. Lech Banachowski, Jan Wierzbicki
Przy odczytywaniu wartości atrybutu Text fokus (bieżący
kursor) musi znajdować się na danym polu:
[Nazwisko].SetFocus
MsgBox "Nazwisko = "&[Nazwisko].Text
21opr. Lech Banachowski, Jan Wierzbicki
Sprawdzenie czy formularz jest otwarty (w widoku Projekt lub Formularz) można zrealizować jeszcze w inny sposób – przeglądając kolekcję wszystkich otwartych formularzy i sprawdzając ich nazwy.
Function Otwarty1 (ByVal Mój As String) As Integer' Zwraca True, jeśli podany formularz jest otwarty w widoku projekt lub formularz. Dim I As Integer Otwarty1 = False ' Forms.Count to liczba obiektów w kolekcji Forms For I = 0 To Forms.Count - 1 If Forms(I).Name = Mój Then Otwarty1 = True Exit For End If Next IEnd Function
22opr. Lech Banachowski, Jan Wierzbicki
Jest możliwość tworzenia instancji klasy formularza w
kodzie VBA:
Dim Kopia As New Form_Osoby
i wykonywanie na niej operacji jak na obiekcie. Instancja
ta nie jest widoczna na ekranie.
23opr. Lech Banachowski, Jan Wierzbicki
Przykład 4
Kolejna procedura specyfikuje reakcję na zdarzenie
naciśnięcia lewego przycisku myszy (obiekt: przycisk Witaj,
zdarzenie: Przy kliknięciu).
Private Sub Witaj_Click()
[Pole] = "Witaj w klubie VBA"
End Sub
24opr. Lech Banachowski, Jan Wierzbicki
Przykład 5Zwróćmy uwagę na procedurę, jaką tworzy kreator przycisków w celu zrealizowania zadania otwarcia formularza o nazwie Osoby:
Private Sub Przycisk_Click() On Error GoTo Err_Przycisk_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "Osoby" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_Przycisk_Click: Exit Sub Err_Przycisk_Click: MsgBox Err.Description Resume Exit_Przycisk_ClickEnd Sub
25opr. Lech Banachowski, Jan Wierzbicki
•Instrukcja DoCmd.OpenForm "Osoby" zawierająca wywołanie
metody OpenForm wbudowanego obiektu o nazwie DoCmd,
powoduje otwarcie formularza Osoby. •W procedurze tej występuje obsługa błędów. Kreator przycisków
tworząc procedurę zdarzenia Przy kliknięciu standardowo
realizuje następującą strategię: •W przypadku wystąpienia błędu - to jest niemożliwości otwarcia
formularza Osoby - przerwij obliczenia i przejdź do sekcji obsługi
błędów przy etykiecie Err_Przycisk_Click. •Wypisz informację o błędzie korzystając z metody Description
specjalnego obiektu Err. •Zakończ wykonywanie procedury.
26opr. Lech Banachowski, Jan Wierzbicki
W opisanej procedurze można byłoby standardowy tekst
błędu Err.Description zastąpić własnym tekstem
skierowanym do użytkownika aplikacji:
MsgBox "Błąd aplikacji. Skontaktuj się z administratorem
aplikacji"
27opr. Lech Banachowski, Jan Wierzbicki
Korzystając z obsługi błędów napiszmy funkcję sprawdzającą czy formularz o nazwie będącej argumentem procedury jest otwarty (w widoku Projekt lub Formularz).
Function czy(ByVal formularz As String) As Boolean On Error GoTo Nie Dim s As String s = Forms(formularz).Name czy = True Exit FunctionNie: czy = FalseEnd Function
28opr. Lech Banachowski, Jan Wierzbicki
Synchronizacja dwóch formularzy
Przykład 6
Otwarcie formularza może być bardziej skomplikowane, aby
mogło wystarczyć użycie samego kreatora przycisków np.
procedura otwierająca formularz Uczestnictwo w projektach w
oparciu o wartość znajdującą się w polu Numer będącym częścią
podformularza przy czym sam przycisk Projekty znajduje się w
głównym formularzu Departament.
29opr. Lech Banachowski, Jan Wierzbicki
Procedura otwiera formularz Uczestnictwo w projektach w celu pokazania uczestnictwa w projektach wybranej aktualnie osoby (w podformularzu):
Private Sub Projekty_Click() On Error GoTo Err_Projekty_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "Uczestnictwo w projektach" stLinkCriteria = "Numer=Forms![Departament]![Osoba Subform].Form![Numer]"
DoCmd.OpenForm stDocName, , , stLinkCriteria Forms![Departament].SetFocus Forms![Departament]![Osoba Subform].SetFocus
Exit_Projekty_Click: Exit Sub Err_Projekty_Click: MsgBox Err.Description Resume Exit_Projekty_Click End Sub
30opr. Lech Banachowski, Jan Wierzbicki
Przykład 7
Formularz wyskakujący Uczestnictwo w projektach powinien
pokazywać dane o aktualnie rozpatrywanym pracowniku z
podformularza w formularzu Departament. Uaktualnienie
wartości następuje przy pojawieniu się nowego rekordu w
podformularzu czyli jako reakcja na zdarzenie Przy bieżącym.
Przy czym to uaktualnienie ma sens, tylko wtedy gdy użytkownik
wcześniej otworzył formularz wyskakujący Uczestnictwo w
projektach naciskając przycisk Projekty. Z kolei naciśnięcie
przycisku Projekty ma sens tylko wtedy, gdy pole Numer w
podformularzu jest niepuste.
31opr. Lech Banachowski, Jan Wierzbicki
W procedurze występują dwie nowe właściwości, których
wartościami są obiekty:•Me – formularz lub raport, którego procedura jest
wykonywana; •Parent – formularz lub raport nadrzędny względem
danego formularza lub raportu.
32opr. Lech Banachowski, Jan Wierzbicki
Private Sub Form_Current() On Error GoTo Err_Form_Current
If IsNull(Me![Numer]) Then Me.Parent![Projekty].Enabled = False Else Me.Parent![Projekty].Enabled = True If Otwarty("Uczestnictwo w projektach") Then Dim Projekt As String Projekt = "[Numer]="& Me![Numer] DoCmd.OpenForm "Uczestnictwo w projektach", , , Projekt Forms![Departament].SetFocus Forms![Departament]![Osoba Subform].SetFocus End If End If Exit_Form_Current: Exit SubErr_Form_Current: MsgBox Err.Description Resume Exit_Form_CurrentEnd Sub
33opr. Lech Banachowski, Jan Wierzbicki
Uaktualnienie formularza wyskakującego jest konieczne nie
tylko, gdy fokus w podformularzu przejdzie do nowego
rekordu, ale również gdy w bieżącym rekordzie zmieni się
wartość pola Numer.
Realizuje to procedura zdarzenia Po aktualizacji dla pola
Numer - jej kod jest analogiczny do procedury zdarzenia Przy
bieżącym.
34opr. Lech Banachowski, Jan Wierzbicki
Utwórzmy dwie tabele Instytucje i Pracownicy połączone związkiem jeden do wiele. Każda instytucja zatrudnia wielu pracowników; każdy pracownik jest zatrudniony w jednej instytucji. Utwórzmy dwa formularze: „Instytucja”, na którym są wyświetlane dane o instytucjach, oraz „Pracownicy” na którym są wyświetlane dane o pracownikach. Chcemy, aby na życzenie użytkownika poprzez naciśnięcie przycisku „Pracownicy instytucji” na formularzu „Instytucja” otwierał się formularz wyświetlający pracowników danej instytucji. Chcemy aby przy chodzeniu po rekordach formularza „Instytucja” aktualizowały się dane o pracownikach zatrudnionych w danej instytucji – oczywiście o ile wcześniej użytkownik otworzył stowarzyszony formularz „Pracownicy”.
35opr. Lech Banachowski, Jan Wierzbicki
Private Sub PracownicyInstytucji_Click() On Error GoTo Form_Current_Err Dim Ins As String Ins = "Id_inst=Forms![Instytucje]!Id" DoCmd.OpenForm "Pracownicy",,,Ins
Form_Current_Exit: Exit Sub
Form_Current_Err: MsgBox Err.Description Resume Form_Current_ExitEnd Sub
36opr. Lech Banachowski, Jan Wierzbicki
Sub Form_Current() On Error GoTo Form_Current_Exit Dim s As String s = Forms("Pracownicy").Name
On Error GoTo Form_Current_Err Dim Ins As String Ins = "Id_inst=Forms![Instytucje]!Id" DoCmd.OpenForm "Pracownicy",,,Ins
Form_Current_Exit: Exit Sub
Form_Current_Err: MsgBox Error$ Resume Form_Current_ExitEnd Sub
37opr. Lech Banachowski, Jan Wierzbicki
Czy rozwiązanie umożliwia wprowadzanie pracowników do
otwieranego z formularza Instytucje formularza Pracownicy?
Private Sub Form_BeforeInsert(Cancel As Integer) On Error GoTo Form_Current_Exit Dim num As Integer num = Forms("Instytucje").id
On Error GoTo Form_Current_Err Id_inst = numForm_Current_Exit: Exit Sub
Form_Current_Err: MsgBox Err.Description Resume Form_Current_ExitEnd Sub
38opr. Lech Banachowski, Jan Wierzbicki
Formularz – podformularz (wyskakujący)
formularz główny
podformularzma dane związane
z formularzem głównym
39opr. Lech Banachowski, Jan Wierzbicki
PROCEDURY UMOŻLIWIAJĄCE KOPIOWANIE KLUCZA GŁÓWNEGO DO PODFORMULARZA WYSKAKUJĄCEGO PRZY DOPISYWANIU DANYCH Option Compare DatabaseOption ExplicitPublic klas As String___________________________________________Private Sub uczniow_Click()On Error GoTo Err_uczniow_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "uczniowie_pdf" klas = Me![id_klasy] stLinkCriteria = "[id_klasa]=" & Me![id_klasy] DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_uczniow_Click: Exit Sub Err_uczniow_Click: MsgBox Err.Description Resume Exit_uczniow_Click End Sub
zmienna globalna
przypisanie wartości zmiennejglobalnej
formularz główny
40opr. Lech Banachowski, Jan Wierzbicki
Private Sub nowy_rec_Click()On Error GoTo Err_nowy_rec_Click DoCmd.GoToRecord , , acNewRec [id_klasa] = Form_klasa_gl.klas
Exit_nowy_rec_Click:
Exit Sub Err_nowy_rec_Click: MsgBox Err.Description Resume Exit_nowy_rec_Click End Sub
wczytanie wartości ze zmiennej globalnej
podformularz
41opr. Lech Banachowski, Jan Wierzbicki
Zdarzenia
Rozważymy kolejno zdarzenia dla obiektów interfejsu
użytkownika (formularzy, raportów, elementów dialogowych) -
które najczęściej są oprogramowywane przy pomocy procedur
zdarzeń.• Przy otwarciu - Open (formularza, raportu) - po otwarciu
formularza (raportu) ale przed wyświetleniem pierwszego rekordu
(przed zdarzeniem Load). Można: •zamknąć inne okno, •ustawić fokus na konkretnym elemencie, •spytać użytkownika jakie rekordy mają się pojawić na
formularzu, •spytać użytkownika o wymagane hasło i odwołać otwieranie
formularza, gdy użytkownik nie potrafi podać poprawnego hasła.
42opr. Lech Banachowski, Jan Wierzbicki
Private Sub Form_Open(Cancel As Integer) Dim strPass as String strPass = InputBox("Podaj hasło: ") If strPass<>"KochamVB" Then MsgBox "Niepoprawne hasło" Cancel = True End IfEnd Sub
43opr. Lech Banachowski, Jan Wierzbicki
Przy załadowaniu - Load (formularza) - po otwarciu
formularza i wyświetleniu jego rekordów: •określa się domyślne ustawienia dla elementów formularza, •wyświetla się okienka informacyjne oraz pola wyliczane w
oparciu o inne dane na formularzu.
Private Sub Form_Load()
Dim StrName As String
MsgBox "Formularz za chwilę pojawi się na ekranie!"
End Sub
44opr. Lech Banachowski, Jan Wierzbicki
Przy bieżącym - Current (formularza) - przy pojawieniu się
pierwszego i każdego kolejnego rekordu (przy nawigacji po
rekordach), również przy usuwaniu rekordu i po odświeżeniu
formularza. Można: •wyświetlać komunikat przy przejściu do nowego rekordu, •wyświetlać powiązane informacje, •zmieniać właściwości elementów np. chowając lub
odkrywając pewne elementy lub zmieniając wyświetlony tytuł
Caption na formularzu.
Private Sub Form_Current()
Forms!Pracownik.Caption = Me![Nazwisko]
End Sub
45opr. Lech Banachowski, Jan Wierzbicki
Przy usunięciu - Delete (formularza) - moment zanim
rekord zostanie usunięty. •Można uzyskać potwierdzenie, że naprawdę chodzi
użytkownikowi o usunięcie bieżącego rekordu.
Private Sub Form_Delete(Cancel As Integer)
If MsgBox("Czy na pewno usunąć?", vbYesNo) =
vbNo Then Cancel = True
End Sub
46opr. Lech Banachowski, Jan Wierzbicki
•Przy zwolnieniu - Unload (formularza) - można: •uzyskać potwierdzenie, że naprawdę chodzi użytkownikowi o
zamknięcie formularza, •wykonać dodatkowe akcje jak zapisanie informacji do dziennika
(logu). •Przy zamknięciu - Close (formularza, raportu) - po zamknięciu
formularza (raportu) i usunięciu go z ekranu. •Można użyć metody OpenForm aby otworzyć kolejny formularz. •Po wstawieniu - After Insert (formularza) - po dodaniu nowego
rekordu do bazy danych. •Jest możliwość odświeżenia danych. •Przed aktualizacją - BeforeUpdate (formularza, elementu
dialogowego) •Jest możliwość sprawdzenia poprawności i cofnięcia aktualizacji.
47opr. Lech Banachowski, Jan Wierzbicki
Po aktualizacji - AfterUpdate (formularza, elementu
dialogowego) - po aktualizacji zmienionych danych w
rekordzie lub elemencie dialogowym. Można: •zastosować filtr, •odświeżyć dane.
Przy kliknięciu - Click (formularza, elementu dialogowego) -
przy naciśnięciu i zwolnieniu lewego przycisku myszy. Np.
naciśnięcie przycisku.
Private Sub cmdClickMe_Click()
MsgBox "Czego chcesz ode mnie?"
End Sub
48opr. Lech Banachowski, Jan Wierzbicki
Przy naciśniętym klawiszu - KeyPress - gdy wprowadza się
znak przez naciśnięcia klawisza. Można sprawdzić ten
znak, ewentualnie całą zawartość pola dostępną na
atrybucie Text - bez tego ostatniego znaku.
Uzyskanie fokusu - GotFocus - gdy element uzyskuje
fokus. Element musi być widoczny (visible) i włączony
(enabled). Np. •ustawienie etykiety dla pola tekstowego:
Private Sub Nazwisko_GotFocus()
[lblNazwisko].Caption = "Rozpatrywany w tej chwili klient"
End Sub
49opr. Lech Banachowski, Jan Wierzbicki
Opuszczanie elementu dialogowego tworzą zdarzenia:
Przed aktualizacją - BeforeUpdate, Po aktualizacji -
AfterUpdate, Wyjście - Exit, Utrata fokusu - LostFocus.
Używa się do: • weryfikacji wprowadzonych danych (w wymienionych
zdarzeniach oba atrybuty Text i Value mają już tę samą
wartość), • zmiany ustawień dla opuszczanego pola.
Private Sub txtPass_Exit(Cancel As Integer)
If Len(txtPass) < 8 Then
MsgBox "Podaj 8 lub więcej znaków."
Cancel = True
End If
End Sub
50opr. Lech Banachowski, Jan Wierzbicki
bez wstrzymywania wyjścia:
Private Sub txtPass_LostFocus()
If Len(txtPass) < 8 Then
MsgBox "Podaj 8 lub więcej znaków."
End If
End Sub
51opr. Lech Banachowski, Jan Wierzbicki
Funkcja DLookUp
Funkcja DLookUp umożliwia sprowadzenie z bazy danych
pojedynczej wartości. Np.•jeśli w formularzu Osoba opartym na tabeli Osoba jest potrzebna
nazwa departamentu zapisana w tabeli Departament, to można
dodać pole wyliczane:
=DLookUp("[Nazwa]";"[Departament]";"[Id]=Forms![Osoba]![Id]")
Ten sam efekt można byłoby uzyskać opierając formularz na
kwerendzie złączającej zamiast na tabeli.
52opr. Lech Banachowski, Jan Wierzbicki
Za pomocą funkcji DLookUp można do pola formularza
wprowadzać wartości obliczane przez kwerendę
wybierającą - wystarczy najpierw zdefiniować taką
kwerendę np.
Zap_max jako
SELECT IIf(IsNull(Max([Numer])),1,Max([Numer])+1) AS
Maks FROM Osoba;
a następnie użyć kwerendy jako źródła dla pola na
formularzu:
=DLookUp("[Maks]"; "Zap_max")
Metodę tę można zastosować więc do generowania
jednoznacznych numerów dla kluczy.
53opr. Lech Banachowski, Jan Wierzbicki
procedura - podstawowa jednostka kodu języka
programowania Visual Basic for Applications (VBA). Są dwa
rodzaje procedur: podprogramy (Sub) i funkcje (Function).
moduł - zbiór deklaracji i definicji procedur języka VBA
przechowywanych razem jako całość. Są dwa rodzaje
modułów: moduły klas obiektów i moduły ogólne.
zdarzenie - sytuacja jaka może wystąpić w trakcie realizacji
aplikacji, dla której programista może przygotować
specjalną obsługę np. w postaci procedury zdarzenia.
DLookUp - funkcja DLookUp umożliwia sprowadzenie z
bazy danych pojedynczej wartości lub wykonanie zapytania
zwracającego pojedynczą wartość.
54opr. Lech Banachowski, Jan Wierzbicki
Koniec wykładu X