Programowanie w języku Delphi » Artykuły

DataSnap (MIDAS)

Pisząc program obsługujący bazę danych, która znajduje się gdzieś w sieci można stworzyć fat client (grubego klienta) lub thin client (chudego klienta).
Fat client jest programem, który zawiera w sobie wszystkie potrzebne moduły, zapytania itp. A thin client przekazuje swoje problemy serwerowi aplikacji. Inaczej mówiąc gruby łączy się bezpośrednio z bazą, a chudy z pośrednikiem.
Korzyści? (1) Chudy klient jest chudy. (2) Większość zmian w aplikacji dokonuje się w warstwie pośredniej - nie trzeba aktualizować programu klienta.
Jak to zrobić? Skorzystać z MIDAS-a, który od jakiegoś czasu nazywa się DataSnap.

SERWER
Stwórz nową aplikację. Następnie wybierz File/New/Other... i z zakładki Multitier (multi to multi, tier - warstwa) wybierz Remote Data Module. Jedyne, co musisz zrobić to wpisać nazwę (CoClass Name). Powinna ona być unikalna (razem z nazwą aplikacji, będzie stanowiła nazwę serwera (ServerName).
Łączenie z MS SQL (można pominąć)
Teraz do wrzuć ADOConnection i ADOQuery (oczywiście można wrzucić inne komponenty do łączenia się z bazą, choćby najprostrze BDE, ale ja łączę się z MS SQL, a szef życzył sobie przez ADO).
W ADOConnection wybierz kropeczki przy właściwości ConnectionString, potem Use Connection String i Build (tam wpisz co trzeba). Teraz spróbuj się połączyć (TestConnection lub właściwość Connected na True). Kiedy wszystko działa w ADOQuery we właściwości Connection wybierz twoje ADOConnection. Potem kliknij kropeczki przy właściwości SQL i wpisz jakieś proste zapytanie (SELECT TOP 10 * FROM CUSTOMER). Spróbuj się połączyć - właściwość Active na True.

Teraz najważniejsze dla serwera. Z zakładki DataAccess wstaw DataSetProvider. Właściwość DataSet ustaw na swoje ADOQuery i koniecznie we właściwości Options/AllowCommandText ustaw True. I to by było na tyle. Oczywisci, gdy się uruchomi serwer, to będzie widoczna forma Form1, tak więc coś tam można wrzucić, żeby głupio nie wyglądało, ale to nie ma żadnego wpływu na działanie serwera. Zapisz serwer pod jakąś nazwą np. "server" i przyjrzyj się plikom w katalogu niespodziewanie pojawił się tam plik: server_TLB.pas. Jest tam w środku ważna informacja, u mnie to wygląda tak:
// GUID:      {E639CF33-1C74-4F30-9036-5DEDD93E6B50}
Uruchom na komputerze, gdzie będzie serwer programik:
C:\Program Files\Borland\Delphi7\Bin\scktsrvr.exe
we właściwościach możesz zmienić port. A na koniec uruchom serwer.

KLIENT
File/New/Application
Wrzuć do klienta Memo, Button i DBGrid. Potem (w końcu z zakładki DataSnap) SocketConnection. Zamiast Socket może być coś innego (w lokalnej sieci dobrze mi chodziło DCOMConnection). Ponieważ jednak mamy FireWall-a, a Socket zużywa tylko jeden port, który trzeba odblokować - krótko mówiąc polecam Socket (socket - gniazdko). Uzupełniamy właściwość Address wpisując tam IP komputera, gdzie uruchomimy nasz serwer, możemy zmienić właściwość portu z 211 na inną, którą udostępnią nam na FireWall-u. Następnie trzeba wypełnić pole ServerName lub ServerGUID (w zasadzie obojętnie które, bo to drugie wypełni się samo, choć niektórzy zalecają ServerGUID). We właściwości ServerName można wybrać serwer, a we właściwości ServerGUID trzeba wrzucić tekst:
{E639CF33-1C74-4F30-9036-5DEDD93E6B50}
Aby sprawdzić, czy wszystko dobrze spróbuj zmienić właściwość Connected na True.
Gdy działa z zakładki Data Access weź ClientDataSet i ustaw właściwość RemoteServer na twoje SocketConnection, a właściwość ProviderName na twoje DataSetProvider i spróbuj czy działa (właściwość Active na True).
Gdy działa dołóż DataSource, właściwość DataSet zmień na twoje ClientDataSet. W DBGrid we właściwości DataSource wstaw twoje DataSource i dopisz procedurę do kliknięcia w Button:
SocketConnection.Connected := True;
ClientDataSet.Active := False;
ClientDataSet.CommandText := Memo1.Lines.Text;
ClientDataSet.Active := True;


I to by było na tyle. Sam oczywiście ta to nie wpadłem, korzystałem z książek: Xavier Pacheco i Steve Teixeira - Delphi 6 Vademecum profesjonalisty Tom 2 oraz Paul Kimmel - Delphi 6 dla profesjonalistów

Muszę jeszcze coś dopisać:
Koniecznie tak gdzie klient musi być biblioteka: midas.dll. Trzeba ją zarejestrować w systemie lub gdy np. tylko testujemy: wgrać ją do katalogu, w którym jest aplikacja klienta. I tu mała dygresja - midas już się nie nazywa midas tylko datasnap, a dll dalej się nazywa midas.dll.