2) jest ściśle uzależniony od tego, w jaki sposób chcesz zaimplementować tę operację. Przykładowy program używa pozycji menu w celu dodania pustego rekordu i wywołuje metodę UjJdate, w momencie gdy użytkownik przechodzi do innego rekordu. Niektóre bazy danych nie pokazują nowego rekordu natychmiast, więc program wywołuje metodę Reąuery. Jej efektem ubocznym jest odświeżenie widoku tak, by wyświetlał pierwszy rekord. Nie wszystkie bazy danych tego wymagają.
Możesz stworzyć kod wstawiający rekordy inaczej. Na przykład, możesz automatycznie dodawać rekord, w momencie gdy użytkownik przejdzie poza koniec bazy danych (używając zdarzenia OnMove).
W przykładowym programie zilustrowałem także wykorzystanie przeliczanego pola. Program oblicza ogólną ilość książek na podstawie dwóch różnych pól. Widok mapuje zwykłą zmienną (m_copies) na statyczny element kontrolny. Niestety, w przypadku statycznych elementów kontrolnych ClassWizard pozwala jedynie na mapowanie łańcuchów, więc dane muszą być w postaci takiego łańcucha. Jeśli chcesz zachować wyświetlanie zawartości jako liczby całkowitej, możesz wziąć pod uwagę pole edycji przeznaczone tylko do odczytu.
Problem z przeliczanym polem polega na wyznaczaniu momentu i miejsca jego aktualizacji. Dobrym miejscem jest funkcja DoDataExchange. MFC wywołuje ją aby upewnić się, że wszystkie elementy kontrolne są zaktualizowane, więc dane rekordsetu także w tym momencie powinny być poprawne. Pamiętaj by umieścić swój kod przed komentarzami ClassWizarda, tak aby dane, które umieszczasz w zmiennej, pojawiły się w elemencie kontrolnym. Widać to na listingu 10.2.
Istnieje wiele sposobów ulepszenia tej prostej aplikacji. Możesz automatycznie dodawać nowe rekordy na końcu bazy lub wracać do aktualnego miejsca po usunięciu bądź dodaniu rekordu. Jednak nawet ten prosty przykład jest użyteczny, gdyż pokazuje, że bez wsparcia ze strony MFC zbudowanie programu bazy danych byłoby dużo trudniejsze.
Podsumowanie
MFC ułatwia dostęp do baz danych dzięki obiektowi CRecordset. Nawet jeśli piszesz program przetwarzania wsadowego (tj. program bez interfejsu użytkownika), możesz bardzo skorzystać na użyciu MFC i klasy CRecordset (lub CDaoRecordset).
Jeśli potrzebujesz interfejsu użytkownika opartego na formularzu, szczególnie użyteczna staje się klasa CRecordYiew. Działa bardzo podobnie jak formularz, lecz ClassWizard potrafi połączyć pola bazy danych (z rekordsetu) bezpośrednio z elementami kontrolnymi widoku.
Podobnie jak w większości programów, możesz stworzyć program bazy danych tak trudny do napisania, jak tylko chcesz. Możesz dodawać dowolne “bajery" i “wodotryski." Jednak w ogromnej większości przypadków, jako podstawy i szkieletu użyjesz kodu wygenerowanego przez kreatora, z bardzo niewielkimi modyfikacjami z twojej strony.
Praktyczny przewodnik MFC i bazy danych
Tworzenie aplikacji bazy danych
Wybieranie ODBC lub DAO
Przygotowanie źródła danych
Łączenie pól bazy danych ze zmiennymi rekordsetu
Łączenie zmiennych rekordsetu z elementami kontrolnymi
Usuwanie rekordów
Dodawanie i aktualizowanie rekordów
Pola przeliczane
MFC bardzo ułatwia pisanie aplikacji baz danych. Gdy poznasz związaną z tym technologię, nie pozostanie już dużo więcej do zrobienia - większość pracy wykona za ciebie AppWizard!
Tworzenie aplikacji bazy danych
Aby zacząć tworzyć aplikację bazy danych, uruchom AppWizarda i w drugim kroku kreatora wybierz jedną z opcji baz danych. Jeśli chcesz wykonać wszystko samodzielnie (co może być dobrym pomysłem, jeśli chcesz przetwarzać dane wsadowo), możesz wybrać drugą opcję, wymuszając, aby AppWizard dodał do projektu jedynie nagłówki. (Pierwsza opcja -domyślna — wyłącza obsługę baz danych.)
Wybranie trzeciej lub czwartej opcji powoduje, że AppWizard tworzy rekordset oraz widok rekordów. Przeznaczeniem rekordsetu jest przechowanie wiersza z wynikowych rekordów lub tabeli bazy danych. Widok rekordu (podobny do widoku formularza) wyświetla wiersz i umożliwia jego edycję. Czwartą opcję wybierz wtedy, gdy chcesz aby AppWizard zajął się także obsługą plików bazy danych, ich otwieraniem, zapisywaniem itd. Wiele baz danych z tego nie korzysta.
Jeśli wybierzesz trzecią lub czwartą opcję, AppWizard stworzy także pasek narzędzi wraz z menu umożliwiającym nawigację po rekordsecie. W drugim oknie kreatora określa się także zestaw wykorzystywanych danych. Możesz wybrać zestaw danych ODBC lub możesz zdecydować się na użycie DAO (patrz następny temat). Możesz także zdecydować się na bezpośredni dostęp do tabeli (tylko DAO), użycie statycznego obrazu danych lub dynamicznie aktualizowanego zestawu rekordów (dynaset).
Wybieranie ODBC lub DAO
MFC może współpracować z bazami danych na dwa sposoby. Możesz użyć nieco starszych klas ODBC lub nowszych klas DAO. ODBC dobrze współpracuje z wszelkimi bazami danych posiadającymi sterowniki ODBC. DAO także współpracuje z takimi bazami, ale szczególnie dobrze radzi sobie z bazami Microsoft Access. DAO także umożliwia dużo łatwiejszą manipulację strukturą tabel.
Której klasy powinieneś użyć? Prawdopodobnie najlepszą decyzją będzie wybranie ODBC. Jeśli jednak używasz tylko Accessa, najlepsze będzie DAO. Jeśli chcesz podjąć się zadań w rodzaju tworzenia nowych tabel, zdecydowanie powinieneś wybrać DAO.
Przygotowanie źródła danych
Aby móc skorzystać z bazy danych, przy pomocy ikony ODBC w Panelu sterowania musisz przygotować źródło danych ODBC. Po prostu dodaj własną lub systemową bazę danych i postępuj zgodnie z instrukcjami. Nie musisz określać pliku zawierającego bazę danych. Jeśli pominiesz nazwę pliku, program poprosi o nią zaraz po uruchomieniu. Jeśli stworzysz nową bazę danych lub dołączysz zestaw danych do istniejącej bazy, program otworzy ją automatycznie, bez żadnej interwencji ze strony użytkownika.