microsoft foundation classes obs ł ugabazdanych

advertisement
MICROSOFT FOUNDATION CLASSES
OBSŁUGA
BAZ
DANYCH
STANDARDY OBSŁUGIWANE PRZEZ MFC:
•∋ ODBC (Open DataBase Connectivity)
•∋ DAO (Data Access Objects)
•∋ OLE DB
NAJWAŻNIEJSZE KLASY:
ODBC
CDatabase
CRecordset
CRecordView
–
–
–
DAO
CDaoDatabase
CDaoRecordset
CDaoRecordView
CDaoWorkspace
CDaotableDef
CDaoQueryDef
opis
połączenie z bazą danych
zbiór rekordów wybranych instrukcją SELECT, często cała tabela
widok formularza bazy danych
sesja – od zalogowania się aż do wylogowania
tabela bazy danych
kwerenda bazy danych (zwykle zdefiniowana w bazie danych)
KORZYSTANIE Z OBIEKTÓW BAZ DANYCH (CDATABASE/CDAODATABASE)
W typowych aplikacjach programista w ogóle nie ma styczności z obiektami tej klasy. Są one stosowane przy tworzeniu rekordsetów, jednakże można wymusić ich automatyczne tworzenie (poprzez podanie
NULL). Celowe jest utworzenie obiektu tej klasy, jeśli chcemy, by kilka rekordsetów korzystało z tego samego
połączenia, oraz przy realizacji pewnych globalnych operacji na bazie.
KORZYSTANIE Z REKORDSETÓW (CRECORDSET/CDAORECORDSET)
W praktyce główny obiekt reprezentujący dane. W najprostszym przypadku odnosi się do całej tabeli; jednak przy otwieraniu rekordsetu można użyć instrukcji SELECT języka SQL celem odfiltrowania potrzebnego zbioru rekordów. Rekordset reprezentuje w danej chwili dane związane z określonym wierszem
tabeli (zestawem pól jednego rekordu); stosowne funkcje pozwalają przesuwać się wzdłuż tabeli. Dostęp do
danych można łatwo zrealizować za pomocą zmiennych składowych, które można wiązać z odpowiednimi
polami bazy danych. Odbywa się to w podobny sposób, jak wiązanie okien kontrolnych dialogu ze zmiennymi składowymi obiektu CDialog. Wartości opisywanych zmiennych są przy każdym przesunięciu wzdłuż
tabeli odświeżane – zarówno w sensie zapisu zmodyfikowanych wartości rekordu do bazy, jak i odczytu
wartości dla nowego rekordu. Dowiązanie zmiennych rekordsetu do pól bazy danych jest realizowane przez
ClassWizarda.
TWORZENIE I OTWIERANIE REKORSETU:
CRecordet (CDaoRecordset) – konstruktor pobiera wskaźnik na obiekt CDatabase (CDaoDataBase).
Podanie NULL spowoduje otwarcie nowego połączenia na podstawie danych zwróconych przez
GetDefaultConnect.
GetDefaultConnect – określa domyślne źródło danych.
Open – otwiera rekordset. Można określić instrukcję języka SQL definiującą zbiór rekordów (np. „SELECT * FROM Pracownicy WHERE pensja > 1000”). Domyślnie brana jest instrukcja dostarczona
przez GetDefaultSQL.
GetDefaultSQL – określa domyślną instrukcję SQL stosowaną przy otwieraniu.
m_strSort – (zmienna składowa) określa sposób sortowania rekordów (klauzula SQL ORDER BY).
m_strFilter – (zmienna składowa) określa sposób filtrowania rekordów (klauzula SQL WHERE).
ATRYBUTY (WYBRANE):
CanAppend – określa, czy do bazy można dodawać rekordy (por. AddNew).
CanBookmark – określa, czy można stosować zakładki (por. GetBookmark i SetBookmark).
CanTransact – określa, czy baza obsługuje transakcje.
CanUpdate – określa, czy można dodawać, zmieniać lub usuwać rekordy.
GetRecordCount – zwraca liczbę rekordów w tabeli.
GetTableName – zwraca nazwę tabeli.
NAWIGACJA (URUCHAMIAJĄ WYMIANĘ DANYCH MIĘDZY REKORDSETEM A BAZĄ DANYCH):
MoveFirst, MoveLast, MovePrev, MoveNext – przesuwa wskaźnik bieżącego rekordu na początek/koniec bazy lub do poprzedniego/poprzedniego rekordu.
Move – przesuwa wskaźnik bieżącego rekordu o podaną liczbę pozycji.
SetAbsolutePosition – przesuwa wskaźnik bieżącego rekordu do bezwzględnej pozycji w tabeli.
GetBookmark, SetBookmark – obsługa nawigacji przy pomocy zakładek.
Find, FindFirst, FindLast, FindPrev, FindNext (tylko CDaoRecordset) – nawigacja z wyszukiwaniem
według określonych kryteriów (jak w SELECT WHERE).
IsBOF, IsEOF – sprawdza, czy wskaźnik bieżącego rekordu znajduje się na przed pierwszym / za ostatnim rekordem w tabeli.
MODYFIKOWANIE BAZY DANYCH:
AddNew – przygotowuje do dodania rekordu – wywołaj Update by zakończyć operację.
Edit – przygotowuje do edycji (modyfikacji) rekordu – wywołaj Update by zakończyć operację.
Update – kończy operacje zainicjowane przez AddNew/Edit poprzez zapis danych do bazy.
CancelUpdate – anuluje uprzednie wywołanie AddNew/Edit.
Delete – zaznacza bieżący rekord do usunięcia.
IsDeleted – określa, czy bieżący rekord został zaznaczony do usunięcia.
INNE:
DoFieldExchange – realizuje wymianę danych pomiędzy rekordsetem a bazą danych.
Requery – ponownie przeprowadza zapytanie do bazy danych, tj. odświeża zawartość rekordsetu.
KORZYSTANIE Z ARCHITEKTURY DOKUMENT–WIDOK
(CRECORDVIEW/CDAORECORDVIEW)
W przypadku aplikacji bazodanowych rolę dokumentu spełnia de facto obiekt bazodanowy, a w
szczególności główny używany przez program rekordset lub zestaw rekordsetów. Rola dokumentu (obiektu
CDocument) ogranicza się zatem do tego, że zawiera on co najmniej jedną zmienną składową tego typu.
Obiekty widoku rekordu obsługują typowy formularz bazodanowy. Klasa pochodzi od CFormView,
stanowi więc pod względem funkcjonalnym mieszankę dokumentu i widoku.
Z każdym obiektem widoku wiąże się jeden obiekt rekordsetu; z poszczególnymi oknami kontrolnymi można wiązać zarówno własne zmienne widoku, jak i zmienne tego rekordestu. W ten sposób okna
kontrolne mogą być pośrednio (poprzez zmienne rekordsetu) związane z polami bazy danych. Tworzenie
takich powiązań jest wspierane przez ClassWizarda.
WYBRANE FUNKCJE SKŁADOWE:
OnGetRecordset – funkcja wirtualna, zwraca wskaźnik na rekordset związany z widokiem; zwykle
zwraca jest to wskaźnik na odpowiednią zmienną obiektu dokumentu.
OnMove – funkcja wirtualna wywoływana podczas nawigacji (przy każdej zmianie bieżącego rekordu)
DoDataExchange – funkcja analogiczna do CDialog::DoDataExchange; realizuje wymianę danych
między oknami kontrolnymi a zmiennymi (widoku i rekordsetu) – można ją wykorzystać do wprowadzenia niestandardowych metod prezentacji danych.
TWORZENIE APLIKACJI BAZODANOWYCH
Podstawową aplikację bazodanową generuje AppWizard. Zawiera ona obiekt rekordsetu, dowiązany do
wskazanej przez programistę tabeli i zawierający komplet zmiennych powiązanych z jej polami (kolumnami).
Ponadto aplikacja zawiera widok formularza bazy oraz zestaw opcji i przycisków na toolbarze pozwalających na
nawigację wzdłuż tabeli. Zadaniem użytkownika jest wprowadzenie do wyświetlanego przez widok, początkowo
pustego formularza własnych okien kontrolnych i dowiązanie ich – za pomocą ClassWizarda – do zmiennych
składowych rekordsetu. Efektem jest prosta aplikacja pozwalająca na przeglądanie i edycję rekordów.
Aby wyświetlić dane w sposób niekonwencjonalny – np. za pomocą innych okien kontrolnych, niż
obsługiwane przez Class Wizarda dla danego typu danych – można wprowadzić dodatkowe przekształcenia
w funkcji widoku DoDataExchange. Dla inicjalizacji okien tylko do odczytu (np. przy prezentacji wyników
przeliczenia wartości pól bazy lub listy wartości pochodzącej z innej, połączonej relacją tabeli) stosownym
miejscem jest też OnMove.
Często analizuje się inne, niż główna tabele. Warto wówczas za pomocą ClassWizarda stworzyć specjalną klasę pochodzącą od CRecordset. W funkcji Open możemy narzucić filtrację instrukcją SQL SELECT. Korzystając z while (!theSet.IsEOF()) { ... ; theSetMoveNext(); } można następnie przeglądnąć cały zbiór rekordów.
Download