1530


Laboratorium Podstaw Informatyki

Kierunek Elektrotechnika

Ćwiczenie 7.3

Podstawy programowania aplikacji

w środowisku Visual C++

Część II

ODBC i OLE

Zakład Metrologii AGH

Kraków 1998

  1. Wprowadzenie

Na poprzednich ćwiczeniach poznaliśmy zastosowanie trzech narzędzi środowiska Visual C++ do budowy aplikacji okienkowych. AppWizard, ClassWizard i AppStudio wspomagają programowanie przez zastąpienie użytkownika we wpisywaniu powtarzalnych części kodu i ukrycie za interfejsem graficznym szczegółów struktury klas i interfejsu użytkownika. Pora użyć tych narzędzi do zbudowania użytecznej aplikacji. Tematami poszczególnych zadań ćwiczenia są różne możliwości komunikacji aplikacji z innymi aplikacjami i z bazami danych.

Komunikacja z innymi aplikacjami została objęta standardem OLE (ang. Object Linking and Embedding) pokrywającym starsze metody komunikacji przez schowek i dynamiczną wymianę danych. Dane z jednej aplikacji mogą być włączone do drugiej na zasadzie łączenia lub osadzenia. Łączony obiekt OLE jest automatycznie aktualizowany w aplikacji docelowej po zmianie jego postaci w aplikacji źródłowej. Osadzony obiekt OLE zachowuje swoją postać z momentu wykonania operacji osadzenia. Aplikacja dostarczająca obiekt OLE jest serwerem OLE, aplikacja docelowa jest klientem OLE. Poszczególne odmiany OLE pozwalają na przemieszczanie elementów aplikacji metodą przenoszenia myszką (ang. Drag&Drop), metodą przekazywania przez schowek i metodą wywołania serwera z aplikacji docelowej (jak to ma miejsce w przypadku edycji równań w edytorze tekstowym MS Word).

Komunikacja z bazami danych ze względu na różnorodność rozwiązań systemów zarządzania bazą danych (ang. Database Management System) jak dBase, MS Access, Oracle, wymagała programowania aplikacji dostosowanej do stosowanego systemu DBMS. Z tego powodu opracowano standard komunikacji z bazami danych niezależny od systemu zarządzania ODBC (ang. Open Database Connectivity). Ujednolicenie obsługi przez zestaw funkcji bibliotecznych programowania ODBC było możliwe dzięki zastosowaniu dla każdego systemu DBMS sterownika konwertującego odwołania ODBC na odwołania specyficzne dla bazy danych. Pakiet Visual C++ instaluje sterowniki dla popularnych systemów DBMS. Do udostępniania danych przez interfejs ODBC służy program administratora ODBC. Programowanie obiektowe aplikacji ODBC jest wspomagane w Visual C++ przez klasy MFC CRecordXXX (kilka klas dla dokumentu, zbioru rekordów i widoku rekordu). Application Wizard po wybraniu opcji ODBC tworzy aplikację zawierającą połączenie ze źródłem danych i domyślną obsługę przeglądania i edycji rekordów.

  1. Zadanie 1 - aplikacja ODBC

    1. Książka telefoniczna

Naszym zadaniem jest utworzenie aplikacji umożliwiającej przeglądania listy rekordów nazwisk i związanych z nimi numerów telefonów. Dane powinny być przechowywane w bazie danych.

Zacznijmy od utworzenia bazy danych danych za pomocą narzędzia Microsoft Query.

Utwórz bazę danych Telefony w formacie MS Access. W bazie utwórz tabelę Znajomi z kolumnami Nazwisko o długości Char(30) i Telefon o rozmiarze Char(30). Wprowadź kilka rekordów danych do tabeli.

Szkielet aplikacji przeglądania danych pomoże nam utworzyć AppWizard ze środowiska Visual C++. W opcjach bazy danych należy wybrać opcję „Database Support, No file support”, ponieważ nie będziemy zapisywać ani odczytywać dokumentów. Źródłem danych będzie utworzona baza danych.

Po uruchomieniu utworzonego szkieletu widać, że AppWizard nie tworzy interfejsu prezentującego aktualny rekord, należy więc utworzyć pola wyświetlania nazwiska i telefonu. Po tej operacji można już przeglądać istniejące rekordy ale nie można dodawać nowych i usuwać istniejących.

Dodawanie rekordu należy poprzedzić wywołaniami funkcji klasy zbioru rekordów:

m_pSet->AddNew();
m_pSet->UpdateData(FALSE);

Potwierdzeniem dodania rekordu jest przesunięcie podglądu na następny rekord. Wołana jest wtedy funkcja OnMove klasy widoku. W niej należy dodać wprowadzone dane rekordu do bazy danych. Realizuje to sekwencja:

if(!UpdateData()) return FALSE;
m_pSet->Update();
m_pSet->Requery();
UpdateData(FALSE);
return TRUE;

Powyższe wywolania należy wykonać tylko wtedy gdy dodanie rekordu zostało zainicjowane. W przeciwnym razie wołać wywołać funkcję OnMove klasy bazowej.

Po wyborze usunięcia aktualnego rekordu należy wywołać funkcje:

m_pSet->Delete();
m_pSet->MoveNext();
if (m_pSet->IsEOF()) m_pSet->MoveLast();
if (m_pSet->IsBOF()) m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);

Dodaj do menu użytkownika opcje dodawania i usuwania rekordów, a z pomocą ClassWizarda funkcje reakcji na wybór opcji.

Gotowym przykładem aplikacji ODBC jest aplikacja Enroll z katalogu MFC\SAMPLES.

  1. Zadanie 2 - serwer OLE

    1. Serwer podpisów

Budowaną aplikacją będzie w tym zadaniu serwer podpisów dla innych aplikacji, np. dla edytora MS Word. W zależności od inwencji autora podpisy mogą być tworzone przez ich rysowanie lub pisane standardowymi czcionkami MS Windows. Mogą również zawierać obrazki. Wykorzystanie takiego serwera będzie polegało na wstawieniu np. do listu pisanego w edytorze MS Word obiektu podpisu standardowego lub wyedytowanego.

Zbudujemy aplikację OLE typu mini-serwer, tj. nie uruchamianą samodzielnie, a tylko z innych programów w trybie wstawiania obiektu.

Utwórz szkielet aplikacji OLE z wybraną opcją Mini-Server.

Do utworzonego szkieletu należy dodać funkcje rysowania w oknie aplikacji serwera przy edycji i w dokumencie docelowym. W czasie edycji wołana jest metoda OnDraw klasy widoku, którą należy pokryć. Rysowaniem w dokumencie docelowym zajmuje się metoda OnDraw klasy ServerItem. Obydwie metody powinny tworzyć taki sam rysunek. Załóżmy, że nasz serwer podpisów będzie tworzył podpis przez wypisanie ustalonego tekstu przechowywanego w klasie dokumentu.

Zmodyfikuj obydwie metody OnDraw. Przetestuj działania utworzonego serwera przez wstawienie podpisu w dokumencie MS Word.

Rozbuduj aplikację do bardziej skomplikowanego sposobu tworzenia podpisów, np. z modyfikacją tekstu podpisu, wyborem czcionki i z możliwością włączania map bitowych do podpisu.

Przykładowa aplikacja OLE z katalogu przykładów MFC to SCRIBBLE7.

  1. Dla tych, którzy chcą wiedzieć więcej - informacje dodatkowe

    1. SQL a ODBC

Podstawą programowania aplikacji bazodanowych jest język porozumiewania się z bazami. Firma IBM opracowała standard takiego języka, przyjęty przez większość producentów, Structured Query Language przeznaczony do pracy z relacyjnymi bazami danych. Standard ODBC przyjmuje SQL za język komunikacji z bazami danych. Przyjmowane są przy tym poziomy zgodności ze standardem. W skład języka wchodzą instrukcje manipulacji na danych, tj. usuwania, dodawania, modyfikacji rekordów, instrukcje zapytań zwracające rekordy spełniające określone warunki, instrukcje definicji danych określające strukturę tabel i indeksów, oraz instrukcje ograniczania dostępu do danych.

W czasie pisania aplikacji z zadania 2.1 nie mieliśmy okazji zetknąć się z tego typu instrukcjiami. Były one ukryte wewnątrz klas tworzących szkielet aplikacji utworzony przez AppWizard.

    1. Szczegóły OLE

W technice OLE wyróżnia się stronę odbierającą obiekt OLE - klient OLE, i stronę wysyłającą - serwer. Większość aplikacji OLE jest jednocześnie klientem i serwerem. Tak jest w przypadku edytora MS Word i arkusza kalkulacyjnego MS Excel, które mogą dostarczać do innych aplikacji dokumenty lub ich części (np. wykres Excela (serwer) do dokumentu Worda (klient)), a mogą również odbierać obiekty OLE z innych aplikacji (np. równanie z edytora równań (serwer) do dokumentu Excela (klient)).

Aplikacja tworzona w zadaniu 3.1 była mini-serwerem. Oznacza to, że mogła być wywoływana tylko z innych aplikacji w trybie wstawiania obiektu OLE. Możliwe są jednak inne rozwiązania serwerów, uwzględnione również w AppWizardzie, tj. pełny serwer i serwer automatyzacji OLE. Pełny serwer to aplikacja OLE która może być wywoływana zarówno z innych aplikacji jak i jako samodzielna aplikacja. Przykładem takiej aplikacji jest MS Excel. Serwer automatyzacji OLE to aplikacja eksponująca dla innych aplikacji zestaw komend i poleceń do wywołania.

Wersja OLE 2.0 wprowadziła możliwość edycji obiektów OLE w oknie aplikacji docelowej. Tak jest także w przypadku serwera podpisów. Jest to tzw. miejscowa aktywacja, przy której w oknie aplikacji docelowej pojawia się na czas edycji obiektu OLE interfejs użytkownika aplikacji źródłowej obiektu OLE (m.in. opcje menu). Po zakończeniu edycji obiektu aplikacja docelowa wraca automatycznie do pierwotnego stanu.

  1. Dla tych, którzy chcą być najlepsi - zadania dodatkowe

    1. Odtwarzanie i prezentacja plików dźwiękowych

W trakcie poprzednich ćwiczeń poznaliśmy różne elementy potrzebne do budowy aplikacji prezentującej w postaci wykresu pliki typu .wav (zapis dźwięku) i odtwarzającej zapis. Poznaliśmy zasady tworzenia interfejsu użytkownika, obsługi wyjścia graficznego w oknie aplikacji i obsługi karty dźwiękowej w języku C. Czas na złożenie tych elementów w całość.

Zbuduj aplikację przeglądarki plików .wav z możliwością odtwarzania dźwięków i ewentualnie z możliwością edycji zapisu. Aplikacja powinna umożliwiać odczytanie informacji o formacie przeglądanego pliku (częstotliwość próbkowania, mono/stereo, ilość bitów).

    1. Aplikacja ODBC z wieloma tabelami

Program Książka Telefoniczna z punktu 2.1 jest bardzo prostą aplikacją ODBC. Obsługuje tylko jedną tabelę bazy danych.

Rozbuduj strukturę bazy danych np. do postaci: tabela danych osób (nazwisko, imię, adres) z polem identyfikatora osoby, tabela firm (nazwa firmy, przedmiot działalności) z identyfikatorem, tabela numerów telefonów powiązanych z osobą/fimą przez identyfikator. Rozszerz zakres obsługi w aplikacji przez wprowadzenie możliwości wyszukiwania rekordu spełniającego zadane warunki wśród firm lub osób.

  1. Literatura

Perry P., Corry C. i inni: Visual C++2.x Podręcznik programisty; LT&P, Warszawa 1996

Każda inna dokumentacja lub podręcznik programisty Visual C++

Laboratorium Podstaw Informatyki Strona 6

Zakład Metrologii AGH



Wyszukiwarka

Podobne podstrony:
28 A 1500 r 1530 r renesans, manieryzm
2002 08 27 1530
1530 spełni się makowiecki?nd IS6RP2HQ6IWBUH55XEGFB6VVPRYVJEZSFDIVGCA
1530
29 A 1530 r 1570 r renesans, manieryzm
1530
1530 Roporzadzenie Rzym I
1530
28 A 1500 r 1530 r renesans, manieryzm
2002 08 27 1530
Opis programowania 1530
Opis wgrywania FW do 1530 po porcie RS232
wgrywania Firmware dla BCT 1530 i 1330
billig czwartek 1530
Zobowiazanie Zygmunta Augusta 1530
1530 service manual

więcej podobnych podstron