Hello World w MIDAS Stwórzmy prostą aplikację Hello World w MIDAS. W tym programie użyjemy standardowych w Delphi komponentów dostępu do danych między innymi TDatabase, TQuery, TProvider, i TClientDataSet. W Delphi, wykonaj następujące kroki: 1) Wybierz File New Application. Główna forma naszej aplikacji i projektu zostanie stworzona. 2) Wybierz File New Data Module. Otrzymamy moduł danych, który będzie przechowywał nie wizualne komponenty. 3) Wybierz File Save All. Do użytku tego przykładu, używamy nazw sugerowanych przez Delphi. W tym punkcie mamy następującą strukturę naszego programu: Project File(s) Element Project1 Project1.dpr Form1 Unit1.pas / Unit1.dfm DataModule2 Unit2.pas / Unit2.dfm
4) Wybierz zakładkę Data Access na palecie komponentów. Upuść TDatabase komponent na DataModule2. Podwójnie kliknij na nim i ustaw jego własności jak pokazano na rysunku poniżej. Następnie kliknij przycisk ok. 5) Uruchom Lokalny Serwer InterBase z menu Start. 6) Ustaw właściwość Connected komponentu TDatabase na True by połączyć się z bazą. 7) Przenieś komponent TQuery na formę i ustaw jego własność DatabaseName na 'internaliblocal ' a własność SQL ustaw na SELECT * FROM department. Sprawdź zapytanie, ustawiając Active na True a poźniej na False. 8) Wybieraj zakładkę MIDAS na palecie komponentów. Upuść komponent TProvider na module danych i ustaw własność DataSet do Query1. 9) Upuść komponent TClientDataSet do modułu danych i ustaw jego własność ProviderName na Provider1. 10) Przejdź znów do zakładki Data Access na palecie komponentów, wybierz komponent TDataSource i przeciągnij go do modułu danych. Ustaw jego własność DataSet na ClientDataSet1.
11) Przeciągnij komponent TActionList z zakładki Standard palety komponentów i upuść go na Data Module. Podwójnie kliknij komponent Action List by wywołać Action List Editor. Twórz dwie nowe akcje. Akcje te dostaną domyślnie nazywy Action1 i Action2. Ustaw ich własności Caption odpowiednio na Apply i Cancel. 12) Wybierz Action1 i wybieraj zakładkę Events w Object Inspector i stwórz obsługę zdarzeń OnExecute i OnUpdate jak pokazano w poniższym kodzie. 13) Stwórz obsługę zdarzenia OnExecute dla Action2 jak pokazano powyżej i przypisz zdarzenie Action1Update do jego zdarzenia OnUpdate. 14) Ustaw własność Active komponentu ClientDataSet1 na True. 15) Zapisz wszystkie zmiany do projektu. W tym punkcie skończyliśmy moduł danych. Powinien on wyglądać podobnie do tego na rysunku poniżej:
16) Wybierz główną formę twojej aplikacji i przyciśnij Alt+ F11 lub wybierz File Use Unit. Zaznacz Unit2 w dialogu Use Unit i kliknij OK. Wszystkie komponenty które umi eściliśmy na module danych są już dostępne od strony formy Form1. 17) Upuszczaj komponent TDBNavigator do górnego obszaru Form1 i ustaw jego własność DataSource na DataModule2.DataSource1. Ustaw również jego własność Flat na True. 18) Upu ść dwa komponenty TButton na prawo od DBNavigator1 i przypisz ich własnościom Action odpowiednio DataModule2.Action1 i DataModule2.Action2. 19) Upuść komponent TDBGrid na głównej formie i zmień jego wielkość by zajął resztę Form 1. Ustaw w DbGrid1 własność Anchors to [akleft, aktop, akright, akbottom]. Zaś własność DataSource DBGrid1 zmień na DataModule2.DataSource1. Wybierz File Save All. Skompiluj aplikację i uruchom ją. To jest koniec ćwiczenia więc możesz sprawdzić jak działa nasza aplikacja. Zauważ, że mamy w pełni funkcjonalną aplikacje bazodaniową z nowoczesnym interfejsem użytkownika i to ze standardowym wyglądzie Windows. Kiedykolwiek zaczynasz zmodyfikować dane, przyciski Apply i Cancel zostają natychmiast włączone. Wszystkie zmiany do danych są obsługiwanie przez transakcje. Można zmieniać kilka rekordów w bazie i nacisnąć Cancel wtedy wszystkie zmiany będą cofnięte. Gdy tylko aktualizuje są zatwierdzone lub cofnięte, przyciski Apply i Cancel zostają wyłączone. Wszystko to otrzymaliśmy po wpisaniu zaledwie kilku linii kodu.
1. Zdarzenie OnUpdate (Stan Klienta Dataset) To jest bardzo ważne przy tworzeniu wszystkich rodzajów aplikacji by użytkownik końcowy czuł, że aplikacje są dostosowane i pod pełną kontrolą. Kiedy są zmiany w danych, to jest dobra praktyką dać znać użytkownikowi o tym fakcie. Dobrym pomysłem jest dostarczyć użytkownikowi możliwość, żeby cofnąć ostatnią zmianę. Dobrą praktyką jest również to, by informować użytkownika że dana opcja, trwale przechowa zmiany w bazy danych. Midas to doskonałe rozwiązanie, by osiągnąć wszystkie te cele. Kombinacja TAction i kilka własności TClientDataSet robi to możliwym. W naszej aplikacji mamy dwie akcje który pozwalaja nam przechować wszystkie zmiany w bazie danych lub odrzucenie nich. Obie akcje muszą być czynić niedostępne, kiedy dane pozostają niezmienione i zostać natychmiast dostępne kiedy użytkownik zaczyna edytować dane. Wspólna procedura obsługi zdarzeń OnUpdate która została przypisana do obu akcji, sprawdza stan własności State poszczególnych zbiorów danych być i sprawdza czy są one w trybie dsinsert lub dsedit, lub czy własność ChangeCount klientów jest większa od zera. Jeśli przynajmniej jeden z warunków jest prawdziwy, akcja z której ten program obsługi został wołany, będzie dostępna. Własność ChangeCount jest przypisana do TClientDataSet. Własność ta określa jak dużo zapisów zostało zaktualizowanych, skasowanych, lub dodanych od czasu, kiedy została uaktywniona. 1.1 OnExecute Action2 (CancelUpdates) Kiedykolwiek jest konieczne przywrócić klienta dataset do jego początkowego stanu, przed jakimikolwiek zmianami, wywołujemy metodę CancelUpdates. Klient dataset przywróci wszystkie zmodyfikowany i skasowane zapisy, używając informację z wewnętrznego dziennika zmian, i usunie wszystkie niedawno dodane zapisy. Nie jest wymagana interakcja z dostawcą danych, dlatego nie jest generowany żaden dodatkowy ruch po stronie serwera. 1.2 OnExecute Action1 (ApplyUpdates) Kiedy trzeba by zmiany zostały zachowane, musimy pobrać własność Delta dataset i przesyłać do dostawcy danych. Klient dataset dostarcza dwie własności, które automatyzują ten proces; Własność ProviderName i własność RemoteServer. Własność RemoteServer będzie rozważona później. Kiedy tylko własność ProviderName jest wybrana, wszystkie działania, które wymaga interakcji między TClientDataSet i TProvider będzie kierowana przez klienta dataset. Klient dataset będzie szukał komponentu TProvider o nazwie określonej przez
ProviderName w tym samym module danych lub formie na której znajduje się dany dataset. Dataset użyje metod dostawcy danych, by otrzymać wymaganą funkcjonalność. Taki sam proces jest, kiedy klient dataset zostanie uaktywniony. Ten rodzaj działalności też bierze miejsce kiedy ty wołasz ApplyUpdates metody TClientDataSet. Klient dataset lokuje się dostawca internetu, dostaje Połączenie trójkątne własność, mija to do dostawca internetu, czeka kiedy dostawca internetu rozwiązuje zmiany do wewnętrznej SQL bazy danych, dostaje błąd kloc i powtarza przez to, łączące pomyślne zmiany i posługiwanie się błędy. W końcu to zwraca liczbę błędów. Metoda ApplyUpdates przyjmuje jeden parametr. Ten parametr jest używany by określić, jak dużo błędów może się zdarzyć podczas procesu uaktualniania. Jeśli parametr ma wartość -1 wtedy wszystkie pomyślne modyfikacje bazy danych będą zatwierdzane. Jeśli to jest 0 wtedy żadne błędy nie mogą powstać: kiedy jeden błąd zdarza się, wszystek poprzednie aktualizacje są cofnięte. Jeśli przekazuje się dodatnią liczbę błędów wtedy dokładnie ta liczba błędów może wystąpić podczas uaktualnienia. Jeśli jest to spełnione wtedy wszystkie zmiany będą zatwierdzone. Jeśli jest nawet jeden więcej błąd niż określony wszystkie pomyślne aktualizuje są cofane.