Bazy Danych
wykład VII
Jan Aleksander Wierzbicki
Interfejs użytkownika
• procedury zdarzeń (VBA)
– podstawowe można wykonywać
przy użyciu kreatora
– bardziej zaawansowane –
tworzymy „ręcznie” kod
• funkcje własne użytkownika
Graf formularzy i
raportów
formularz startowy
- rozprowadzający
formularz I
formularz II
raport I
formularz III
raport II
Otwieranie formularza i raportu
DoCmd.OpenForm
nazwa_formularza[,widok][,nazwa_filtru]
[,warunek_WHERE] [,tryb_danych][,tryb_okna]
Np. widok - acDataForm, acFormDS,
tryb danych, okna - acFormReadOnly,
acIcon
DoCmd.OpenReport
nazwa-raportu[,widok][,nazwa-filtru][,warunek-
WHERE]
Chodzenie po rekordach formularza
(rekord następny, poprzedni, pierwszy, ostatni,
nowy)
DoCmd.GoToRecord
, ,
acFirst
(acPrevious,
acNext, acLast, acNewRec)
Zamykanie obiektów
(np. Formularza)
DoCmd.Close
– bieżący,
DoCmd.Close
acForm, „Ksiazki"
– zadany
Uruchomienie kwerendy
DoCmd.OpenQuery
nazwa-kwerendy, acNormal,
acEdit
Filtrowanie zawartości
formularza
DoCmd.ApplyFilter
, "[Rok wydania]>=Forms!
[Ksiazki]![Data]"
[Data]
– zadane pole tekstowe
DoCmd.ShowAllRecords
– wszystkie rekordy
PROCEDURA ZAMYKAJĄCA AUTOMATYCZNIE
PRZY ZAMYKANIU DANEGO FORMULARZA
DRUGI OTWARTY FORMULARZ, np. formularz
Książki
{do formularza - zdarzenie zamknięcie
formularza}
Private Sub Form_Close()
If SysCmd(acSysCmdGetObjectState, acForm,
"KSIAZKI") <> 0 Then
DoCmd.Close acForm, "KSIAZKI"
End If
End Sub
Sprawdza czy dany formularz
jest otwarty
PROCEDURA SPRAWDZAJĄCA CZY SĄ
WYPEŁNIONE POLA „WYDAWNICTWO” ORAZ
„CENA”.
Gdy pole wydawnictwo jest wypełnione, a pole cena
nie, pojawia się komunikat z możliwością powrotu
do wypełniania pola cena.
{do formularza - zdarzenie przed aktualizacją}
Sub Form_BeforeUpdate (cancel As Integer)
Dim komunikat As String
Dim opcja As Integer
Dim wybor As byte
If Not IsNull(wydawnictwo) And IsNull(cena) Then
komunikat = "Brak ceny"
opcja = vbquestion + vbokcancel
wybor = MsgBox(komunikat, opcja)
If wybor = vbcancel Then
cena.SetFocus
cancel = True
End If
End If
End Sub
Możliwość wyboru:
akceptacji lub anulowania
Jeśli wybrane Anuluj, następuje powrót
- ponowna możliwość wpisania ceny
PROCEDURA wypełniająca automatycznie
pole „UWAGI” w zależności od wartości w
polu „CENA”
{do pola cena - zdarzenie po aktualizacji}
Sub cena_AfterUpdate ()
Select Case cena
Case 50 To 100
[uwagi] = ”tania”
Case Is > 100
[uwagi] = ”droga”
End Select
End Sub
Wpisywana wartość jest warunkowana
od zadanego przypadku
Formularz – podformularz
(wyskakujący)
formularz
główny
podformularz
ma dane związane
z formularzem
głównym
KOPIOWANIE WARTOŚCI ZADANEGO KLUCZA
GŁÓWNEGO DO PODFORMULARZA
WYSKAKUJĄCEGO (KLUCZ OBCY) PRZY
DOPISYWANIU DANYCH
{do przycisku nowy rekord - zdarzenie kliknięcie}
Private Sub nrek_Click()
On Error GoTo Err_nrek_Click
DoCmd.GoToRecord , , acNewRec
[wydawnictwo] = Forms![wydawnictwo]![skrot]
Exit_nrek_Click:
Exit Sub
Err_nrek_Click:
MsgBox Err.Description
Resume Exit_nrek_Click
End Sub
Przypisanie wartości
dla klucza obcego
Private Sub Form_Open(Cancel As Integer)
Dim Haslo as String
Haslo = InputBox("Podaj hasło: ")
If Haslo <>”Bazy" Then
MsgBox "Niepoprawne hasło"
Cancel = True
End If
End Sub
Hasło na
otwarcie
formularza
Zdarzenie do formularza –
Przy otwarciu
Przy usunięciu
Zdarzenie do formularza –
Przy usunięciu
Potwierdzenie, czy na pewno usunąć
bieżący rekord
Private Sub Form_Delete(Cancel As Integer)
If MsgBox("Czy na pewno usunąć?", vbYesNo)
= vbNo Then Cancel = True
End If
End Sub
PROCEDURA dopisująca nowe wydawnictwo z
poziomu formularza opartego na tabeli
Ksiazki.
Wartość pola Wydawnictwo (klucz obcy) jest
wyświetlana poprzez pole kombi – zbudowany
odnośnik.
opcja
Dane|Ogranicz do listy
– włączona na
TAK
{do pola kombi wydawnictwo
- zdarzenie przy wartości spoza listy}
Private Sub WYDAWNICTWO_NotInList(
NewData
As String,
Response
As Integer)
Dim ctl As Control
Set ctl = Me![WYDAWNICTWO]
If MsgBox("Czy chcesz dodać nowe wydawnictwo?",
vbYesNo, "UWAGA") = vbYes Then
DoCmd.RunSQL "INSERT INTO Wydawnictwa(skrót)
VALUES('" &
NewData
& "')"
Response
= acDataErrAdded
Else
Response
= acDataErrContinue
ctl.Undo
End If | End Sub
Wartość wpisana do pola kombi
Okno komunikatu – wybór działania
Dodanie rekordu
do tabeli
Wydawnictwa
Cofnięcie wpisu, rekord
nie zostanie dodany
FUNKCJA WYŚWIETLAJĄCA KOMUNIKAT
Option Compare Database
'Użyj porządku bazy danych do porównania
ciągów znakowych
Function
komunikat()
MsgBox "Okno komunikatu!"
End Function
FUNKCJA LICZĄCA PIERWIASTEK
Function
pierw() As
Double
Dim komunikat As String
Dim tytuł As String
Dim domyslnie As Integer
Dim wczytane As Double
Komunikat = "Podaj liczbę"
Tytul = "Pierwiastek"
Domyslnie = "1"
wczytane = InputBox(Komunikat, Tytul,
Domyslnie)
pierw = Sqr(wczytane)
MsgBox "obliczony pierwiastek"
End Function
Wczytanie zadanej liczby
Graf formularzy i
raportów
formularz startowy
- rozprowadzający
formularz I
formularz II
raport I
formularz III
raport II
Koniec wykładu VII