[ Pobierz całość w formacie PDF ]
.13.Na liÅ›cie Functions podwójnie kliknąć funkcjÄ™ sum (), a nastÄ™pnie równieżpodwójnie na pozycji TaskDuration listy Column.14.Kliknąć kolejno przyciski Save i Close, aby powrócić do głównego oknadialogowego konstruktora zapytaÅ„.(por.Rysunek 11.13).Rysunek 11.13.Pole oknadialogowegoExpressionz konstruktorazapytaÅ„ Delphi.Aby zobaczyć rezultat pracy, należy kliknąć ikonÄ™ SQL (ikona w ksztaÅ‚cieokularów na pasku narzÄ™dziowym).Wygenerowany przez konstruktora zapytaÅ„kod SQL bÄ™dzie wyglÄ…daÅ‚ mniej wiÄ™cej tak:SELECT WODETAIL.WORDER_NUMBER ,(sum( WORKTYPE.TASKDURATION)) as WorkDurationFROM WODETAIL WODETAIL, WORKTYPE WORKTYPEWHERE (WODETAIL.WORK_TYPE_CODE=WORKTYPE.WORK_TYPE_CODE)AND(( WODETAIL.WORDER_number= :WORDER_number ))GROUP BYWODETAIL.WORDER_NUMBERPo uproszczeniu zapytanie może wyglÄ…dać nastÄ™pujÄ…co:SELECT SUM ( WORKTYPE.TASKDURATION) WorkDurationFROM WODETAIL, WORKTYPEwhere WODETAIL.WORK_TYPE_CODE=WORKTYPE.WORK_TYPE_CODEand WORDER_NUMBER= :WORDER_NUMBERZapytanie sumuje czas pracy, okreÅ›lony w wykazie prac w rozbiciu na zadaniaelementarne.Podczas pracy programu pole WORDER_NUMBER jest wypeÅ‚nionewartoÅ›ciami, wiÄ™c zapytanie bÄ™dzie dodawaÅ‚o jedynie wartoÅ›ci rekordówodpowiadajÄ…cych aktualnemu numerowi zestawienia prac. 370 Część IIPracÄ™ koÅ„czymy zamykajÄ…c okna SQL Statement oraz konstruktora zapytaÅ„.Nowezapytanie zostanie zachowane automatycznie, jako wÅ‚aÅ›ciwość SQL komponentuquWorkDuration.Wykorzystanie zapytania w formularzuAby móc wykorzystać zapytanie w formularzu, należy:1.Kliknąć podwójnie wÅ‚aÅ›ciwość Params nowego komponentu quWorkDurationi okreÅ›lić typ danych parametru WORK_ORDER_NUMBER na Integer;wciskajÄ…c klawisz OK zachować wprowadzone zmiany.2.Podwójnie kliknąć na komponencie Query, aby otworzyć edytor pól.3.Prawym klawiszem myszy kliknąć na edytorze i wybrać opcjÄ™ Add fields.4.Wybrać z listy pozycjÄ™ WorkDuration, kliknąć OK i zamknąć edytor pól.Umożliwi to Å‚atwe odwoÅ‚ywanie siÄ™ do kolumny poprzez jej nazwÄ™.Zdarzenie AfterPostPo skompletowaniu zapytania jesteÅ›my gotowi do poÅ‚Ä…czenia go z tabelÄ…WODETAIL.W tym celu klikamy komponent taWODETAIL, a nastÄ™pnie stronÄ™Event inspektora obiektów.Podwójnie klikamy na zdarzeniu AfterPosti dodajemy nastÄ™pujÄ…cy kod:with quWorkDuration do beginif Active then Close;ParamByName( WORDER_NUMBER ).AsInteger:=taWODETAILWORDER_NUMBER.¥' AsInteger;Open;taWORDEREndDate.AsFloat:=taWORDERStartDate.AsFloat+quWorkDurationWorkDuration.AsFloat;end;Arytmetyka dat w DelphiNastÄ™pny fragment programu uruchamia zapytanie, po czym dodaje jego rezultatdo kolumny StartDate w tabeli WORDER, okreÅ›lajÄ…c datÄ™ zakoÅ„czenia prac.TakiepodejÅ›cie oparte jest na dwóch podstawowych przesÅ‚ankach.Pierwsza wynika zesposobu przechowywania daty i czasu (w postaci liczby zmiennoprzecinkowej).Jej część caÅ‚kowita okreÅ›la liczbÄ™ dni od 31 grudnia 1899 r., zaÅ› część uÅ‚amkowaczas obliczony jako uÅ‚amek doby.Umożliwia to dodanie dni do daty przezzsumowanie caÅ‚kowitych części liczb.Drugie zaÅ‚ożenie to przyjÄ™cie, że edycjabieżącego rekordu tabeli WORDER wskazuje go jako wÅ‚aÅ›ciwy zbiór danych.Innymi sÅ‚owy, zaznaczenie zestawienia prac w formularzu tabelarycznym wybieraautomatycznie wÅ‚aÅ›ciwe elementy tabeli WORDER.Odpowiedni rekord pozostaje Formularze 371bieżącym w tabeli, dopóki nie przeniesiemy kursora w inne miejsce.Oznacza to,że nie trzeba przeszukiwać tabeli WORDER celem uaktualnienia wÅ‚aÅ›ciwegorekordu.Zdarzenie AfterDeleteZdarzenie Post nie jest jedynym, które powinno powodować ponowne przeliczenieczasu trwania prac.Program powinien zareagować tak samo również na usuniÄ™cierekordu z tabeli WODETAIL.W tym celu, w inspektorze obiektów należyzaznaczyć zdarzenie AfterDelete, kliknąć na liÅ›cie rozwijalnej i wybraćpozycjÄ™ taWODETAILAfterPost.W ten sposób oba zdarzenia bÄ™dÄ…powodowaÅ‚y jednakowe skutki.Testowanie rozszerzeÅ„Uruchamiamy aplikacjÄ™ i wprowadzamy oraz usuwamy kilka pozycji zakresurobót.Podczas edycji data zakoÅ„czenia powinna siÄ™ odpowiednio zmieniać.Formularz jest automatycznie aktualizowany podczas zmiany kolumny EndDatew formularzu moduÅ‚u danych fmRENTMAN.JednoczeÅ›nie odÅ›wieżanie terminuzakoÅ„czenia pracy po każdej zmianie w szczegółowym wykazie prac nie wykluczawpisania przez użytkownika (w miejsce skalkulowanego terminu) wÅ‚asnej datyukoÅ„czenia zadania [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wpserwis.htw.pl