Bazy danych programu
Microsoft Access w Visual Basicu.
Część 1: Odczytywanie
i zapisywanie informacji do istniejącej bazy danych.
Pisząc w Visual Basicu programy
mające za zadanie wykonywanie podstawowych operacji
(wyszukiwanie, wyświetlanie itd.) na wprowadzanych przez
użytkownika danych, każdy musi zdecydować w jaki sposób te
dane będą przez program zapisywane. Jednym z najprostszych
sposobów jest użycie do tego celu baz danych programu Microsoft
Access. Rozwiązanie to niesie ze sobą bardzo wiele pozytywnych
(czas) efektów. Korzystając z biblioteki Microsoft DAO Object Library (w moim przypadku wersja
3.51) zyskujemy dostęp do niemalże wszystkich mechanizmów
programu Microsoft Access, tym samym więc możemy dodawać nowe
tabele, kwarendy, formularze, a przede wszystkim rekordy do
istniejących lub tworzonych baz danych. Przy czym dodać należy, że nie jest
wymagane, aby na danym komputerze był zainstalowany program
Microsoft Access. Dostęp do jego funkcji jak już wspomniałem
uzyskujemy poprzez ustawienie referencji do wyżej wymienionej
biblioteki.
Zanim będziemy mogli dokonać
odczytu lub też zapisu do bazy danych musimy najpierw ją
otworzyć. W tym celu na początku najlepiej jest zadeklarować
zmienną poprzez którą, będziemy się później odwoływać
się do bazy danych. Można tego dokonać w następujący sposób
(w przypadku programów, w
których dostęp do bazy odbywa się z kilku różnych form,
deklarację tą najlepiej jest umieścić w module programu)
Public myDb As Database
Po zadeklarowaniu zmiennej
przystępujemy do samego procesu otwierania bazy.
Set myDb =
DBEngine.Workspaces(0).OpenDatabase(Sciezka_do_bazy_danych)
Po pomyślnym otworzeniu bazy zyskujemy realny dostęp do metod i
właściwości obiektu Database. Już w tej chwili możemy na
przykład sprawdzić wersję bazy danych (myDb.Version),
dowiedzieć się czy będzimy mogli wyłącznie z niej
odczytywać ifnormacje czy też istnieje możliwość zapisu
(myDb.Updatable). W tej chwili należy zadeklarować następną
zmienną dzięki której będziemy odwoływać się do zbiorów
rekordów danej bazy czyli na przykład tabel.
Public myRs As Recordset
Po zadeklarowaniu zmiennej
przystępujemy do procesu otwierania zbioru rekordów.
Set myRs =
myDb.OpenRecordset("Nazwa zbioru rekordów",
dbOpenDynaset)
Od chwili pomyślnego otworzenia
zbioru rekordów możemy już odczytywać informacje lub je
zapisywać
do naszej bazy. Odczyt informacji odbywa się poprzez
następującą komendę:
rekord = myRs![Nazwa rekordu]
Zapis odbywa się w podobny
sposób:
myRs![Nazwa rekordu] = rekord
W przypadku gdy poszczególna nazwa rekordu danego zbioru
rekordów jest oddzielona spacjami należy ją umieścić w
nawiasach kwadratowych, w przeciwnym wypadku można je spokojnie
pominąć. Już dzięki tym prostym komendom możemy odczytać z
bazy interesujące nas informacje. Całość danych danego zbioru
rekordów możemy pozyskać dla naszych celów w następujący sposób:
While Not myRs.EOF
If Not IsNull(myRs![Nazwa rekordu]) Then
nazwa = CStr(myRs![Nazwa rekordu])
End If
myRs.MoveNext
Wend
Przy czym w miarę potrzeby, dane te, podczas odczytu można
wpisać w tablicę lub w jakikolwiek inny sposób wyświetlić
(np. ListView). Przy czym pod odczytaniu informacji należy
pamiętać o zamknięciu zbioru rekordów (myRs.Close) i w
przypadku zakończenia odczytywania informacji z całej bazy,
również o jej zamknięciu (myDb.Close). Jeżeli jednak chcemy
odczytać tylko wybrane informacje, możemy sprawdzać czy zawartość
danego rekord nam odpowiada (patrzy przykład powyżej) lub na
przykład dodać do zbioru rekordów drugi rekord definiujący
rekord właściwy. Może to mieć praktyczne zastosowanie jeżeli
chodzi o datę definiującą dany rekordu w naszym programie itp. Oba ta sposoby
jednakże zmuszają nas do odczytywania i sprawdzania z poziomu
Visual Basica wszystkich rekordów co w przypadku zbioru
rekordów składającego się z kilku lub kilkunastu tysięcy
pozycji może na wolniejszych komputerach zabierać trochę
czasu. W tym celu posłużymy się więc wewnętrznym mechanizmem
Accessa do wyszukiwania interesujących nas rekordów.
Set myRs = myDb.OpenRecordset( _
"SELECT [Nazwa 1], [Nazwa 2], [Nazwa 3] " & _
"FROM [Nazwa zbioru rekordów] ORDER BY [Nazwa 1]", _
dbOpenSnapshot)
szukaj = wzorzec
szukaj = "[Nazwa 1] = '" & szukaj &
"'"
With myRs
.MoveLast
.FindFirst szukaj
If .NoMatch Then
MsgBox "Nie znaleziono pozycji zawierającej " &
wzorzec
GoTo nie_znaleziono_rekordu
End If
--- tutaj odczyt danych ---
End With
nie_znaleziono_rekordu:
myRs.Close
Jak widać tym razem podczas
otwierania zbioru rekordów z bazy danych dodatkowo pojawiły
się słowa "SELECT", "FROM" oraz "ORDER
BY". Nazwy rekordów występujące po "SELECT"
oznaczają rekordy, z których odczytywane będą dane,
"FROM" wskazuje nazwę zbioru rekordów, z którego
będziemy je odczytywać, a
"ORDER BY" definiuje nam, który rekord odgrywa
kluczowe znaczenie w stosunku do pozostałych rekordów (który
rekord ma być przeszukiwany). Następnie szukany ciąg znaków
należy zapisać w postaci: "[Nazwa rekordu] =
'wzorzec'" i można przystępować do przeszukiwania danego
zbioru rekordów.
Robert Szymański (technotr@arka.mtl.pl )
zanotowane.pldoc.pisz.plpdf.pisz.plteen-mushing.xlx.pl