[ Pobierz całość w formacie PDF ]
.Powoduje to wyÅ›wietlenie komunikatu o bÅ‚Ä™dziei uniemożliwia zatwierdzenie wiersza.Możemy tworzyć nasze wÅ‚asne, pochodnetypy wyjÄ…tków lub korzystać tylko z tych, których dostarcza Delphi.OnExitInnym powszechnie wykorzystywanym miejscem implementowania bazujÄ…cych napolach reguÅ‚ logiki aplikacji jest zdarzenie OnExit w skojarzonych z danymi(data-aware) komponentach, takich jak DBEdit.Do zdarzenie OnExit możemydoÅ‚Ä…czyć kod, który bÄ™dzie siÄ™ wykonywać w momencie, gdy użytkownik zaczniewychodzić z danej kontrolki.Kod ten może przypisywać wartoÅ›ci innym polom(na przykÅ‚ad, przypisywać datÄ™ zakoÅ„czenia w oparciu o dostarczonÄ… datÄ™rozpoczÄ™cia), dokonywać sprawdzenia wartoÅ›ci lub też uwidaczniać albo ukrywaćinne komponenty na formularzu w zależnoÅ›ci od wprowadzonych wczeÅ›niejwartoÅ›ciZbiory danych a reguÅ‚y logiki aplikacjiNastÄ™pnym poziomem, na którym konstruować można reguÅ‚y logiki aplikacjiaplikacji, jest poziom zbiorów danych (DataSet).W klasie komponentówDataSet (której pochodnymi sÄ… wszystkie komponenty Table, Queryi StoredProc) wystÄ™pujÄ… trzy zdarzenia, które zasÅ‚ugujÄ… na specjalnÄ… uwagÄ™:OnNewRecord, BeforeDelete i BeforePost.OdpowiadajÄ… one z grubszaprocedurom zdarzeÅ„ INSERT, DELETE I UPDATE, które można podÅ‚Ä…czać dotabel bazy danych.OnNewRecordZdarzenie OnNewRecord zachodzi za każdym razem, gdy do tabeli dodawanyjest nowy rekord.Można go wykorzystać do nadawania wartoÅ›ci kolumnom tabeli.A oto próbka kodu, dostarczajÄ…ca domyÅ›lnych wartoÅ›ci kolumnom PetDepositi LawnService z tabeli LEASE, wykorzystywanej w sekcji Tutorial książki:638 Część IVprocedure TForm1.taLEASENewRecord(DataSet: TDataSet);begintaLEASEPetDeposit.Value:=0;taLEASELawnService.Value:=True;end;BeforeDeleteZdarzenie BeforeDelete, jak sama nazwa wskazuje, poprzedza kasowaniewiersza.Zdarzenia BeforeDelete można użyć do sprawdzenia poprawnoÅ›ciusuwania wiersza zanim zostanie ono wykonane.Na przykÅ‚ad można jewykorzystać aby zapobiec usuniÄ™ciu wiersza, który jest powiÄ…zany z wierszamiinnej tabeli.JeÅ›li w trakcie obsÅ‚ugi tego zdarzenia wygenerujemy wyjÄ…tek,usuwanie zostaje przerwane.Poniżej podajemy próbkÄ™ kodu używajÄ…cego tabelLEASE i PROPERTY z części drugiej tej książki:taLEASE.IndexName:= Propery_Number ;If taLEASE.FindKey([taPROPERTYProperty_Number.AsInteger]) thenraise EDatabaseError.Create( Property_Number is in use - deletefailed );Ten fragment programu zabezpiecza przed usuniÄ™ciem wierszy tabeli PROPERTYktóre posiadajÄ… odwoÅ‚anie do wierszy w tabeli LEASE.BeforePostZdarzenie BeforePost, jak sama nazwa wskazuje, zachodzi tuż przedzapisaniem wiersza w jego rodzimej tabeli.Zdarzenia BeforePost można użyćdo sprawdzenia poprawnoÅ›ci wartoÅ›ci w nowym wierszu lub zmian dokonanychw wierszu istniejÄ…cym.JeÅ›li w trakcie obsÅ‚ugi tego zdarzenia wygenerujemywyjÄ…tek, zatwierdzanie zostaje przerwane.Poniżej podajemy próbkÄ™ koduzapewniajÄ…cÄ…, że chronologicznie data LeaseEndDate wypadnie zawsze podacie LeaseBeginDate:procedure TForm1.taLEASEBeforePost(DataSet: TDataSet);beginIf (taLEASELeaseBeginDate.AsDateTime >¥' taLEASELeaseEndDate.AsDateTime) thenraise EDatabaseError.Create( Lease ending date m.¥' ust come after its beginning date );end;Istnieje kilka innych specjalnych zdarzeÅ„ DataSet, które można wykorzystać doimplementowania bazujÄ…cych na programie reguÅ‚ logiki aplikacji.Tabela 21.1RozdziaÅ‚ 21 ReguÅ‚y logiki aplikacji w aplikacjach Delphi 639zawiera listÄ™ zdarzeÅ„ dostÄ™pnych w klasie komponentów DataSet, które majÄ…zwiÄ…zek z projektowaniem reguÅ‚ logiki aplikacji.Tabela 21.2.Metody DataSet, które mogÄ… siÄ™ przydać przy implementowaniubazujÄ…cych na aplikacji reguÅ‚ biznesowych.Zdarzenie Czynnik wywoÅ‚ujÄ…cyAfterCancelZachodzi po CancelAfterCloseZachodzi po zamkniÄ™ciu DataSetAfterDeleteZachodzi po DeleteAfterEditZachodzi po EditAfterInsertZachodzi po Insert lub AppendAfterOpenZachodzi po otwarciu DataSetAfterPostZachodzi po PostBeforeCancelZachodzi przed CancelBeforeCloseZachodzi przed zamkniÄ™ciem DataSetBeforeEditZachodzi przed EditBeforeInsertZachodzi przed Insert lub AppendBeforeOpenZachodzi przed otwarciem DataSetOnCalcFieldZachodzi gdy pole obliczane potrzebuje wartoÅ›ciOnDeleteErrorZachodzi gdy przy kasowaniu rekordu pojawia siÄ™problemOnEditErrorZachodzi gdy przy redagowaniu rekordu pojawia siÄ™problemOnFilterRecordZachodzi gdy filtrowanie jest uaktywnione i DataSetpotrzebuje wiersza
[ Pobierz całość w formacie PDF ]