Databáze > Firebird a Interbase
Otázky začínajúceho 2
Stanislav Hruška:
Vlastne len jedna. Ide o overovanie údajov posielaných do DB. Nateraz to robím v aplikácii týmto spôsobom
--- Kód: ---procedure TfrmLandlord.LandlordPost;
begin
with frmLandlord do
begin
with FlatTable do
begin
if FieldByName('RoomNumber').IsNull then
begin
Fault('Zadajte číslo bytu');
dbedtRoomNumber.SetFocus;
Exit;
end;
if FieldByName('Floor').IsNull then
....
--- Konec kódu ---
Tie podmienky sú komplikovanejšie, ak overujem platnosť údaja. Mám to dať na stranu DB. V tom prípade potrebujem minimálne:
- zistiť chybu, aby som vypísal správny oznam
- zistiť komponent, ktorého sa to týka. O ňom DB nevie vôbec nič. Kvôli SetFocus. Samozrejme, s tým údajom môžu pracovať rôzne komponenty na rôznych formulároch.
Ide mi o postup ako na to. Čo a ako použiť, naštudovať.
pf1957:
--- Citace: Stanislav Hruška 08-10-2012, 08:56:20 ---Ide mi o postup ako na to. Čo a ako použiť, naštudovať.
--- Konce citace ---
Ja jsem v nasem frameworku udelal u predka formularu abstraktni mechanismus validace, kde je cirkus kolem Disable/UpdateControls a na nej navazujici CheckValidity, ResetInvalidControls, nejakej error box apod. Na kazdem formulari pak jenom prekryjeme virtualni metody DoUpdateControls, DoCheckValidity atd. a ty kontroly vcetne operace save jsou by default napojeny na OnCloseQuery event, takze je-li vse OK, data se ulozi a formular se zavre. Pri neplatnych datech se save nedela, jen ze zobrazi neplatna pole a nekam se v pripade potreby jeste vypisi chyby.
Stanislav Hruška:
Pri tomto riešení predpokladám, že prechádzaš celý formulár a hľadáš TEdit, TDBEdit a spol.
//Ja jsem v nasem frameworku udelal u predka formularu abstraktni mechanismus validace,
To sú techniky, ktoré vlastne nepoužívam a tým ani neovládam. Ale už by som mohol začať pracovať na kategórii nestriekač.
//kde je cirkus kolem Disable/UpdateControls a na nej navazujici CheckValidity, ResetInvalidControls, nejakej error box apod
Zoberme konkrétne CheckValidity. Som presvedčený, že podmienky či už skôr priamo vyhodnotenie dostaneš z DB. A tu neviem ako to získať (mám na mysli druh chyby null, neplatná hodnota, prázdny string...) a kto to (ktorý edit) spôsobil.
Tie ostné veci si viem predstaviť.
pf1957:
--- Citace: Stanislav Hruška 08-10-2012, 13:10:53 ---Zoberme konkrétne CheckValidity. Som presvedčený, že podmienky či už skôr priamo vyhodnotenie dostaneš z DB. A tu neviem ako to získať (mám na mysli druh chyby null, neplatná hodnota, prázdny string...) a kto to (ktorý edit) spôsobil.
--- Konce citace ---
No nevim... Sice nejsem zadny DB specialista, ani nejsem zamereny na psani klientskych DB aplikaci. Na druhou stranu jsem pracoval se vsemi moznymi i nemoznymi DB pres ruzne konektivity na ruznych platformach a nikde jsem se s necim tak detailnim nesetkal.
Kdyz vezmu konkretne Ptaka ohnivaka a FIB+ komponenty, tak z nich dostaneme akorat:
--- Kód: Delphi --- property LastKindIBError: TKindIBError read FLastKindIBError; property LastSQLCode: integer read FLastSQLCode; property LastIBErrorCode: integer read FLastIBErrorCode; property LastRaiserName: string read FLastRaiserName; property LastSQLMessage: string read FLastSQLMessage; property LastIBMessage: string read FLastIBMessage; property LastCustomMessage: string read FLastCustomMessage; property LastMsg: string read FLastMsg;
a ten kind vypada takhle:
--- Kód: Delphi ---TKindIBError = (keNoError, keException, keForeignKey, keLostConnect,keSecurity, keCheck, keUniqueViolation, keOther);
Takze se neco zjistit dat (jeste jsou tam nejake lexemy, ale temi jsem se nezabyval), ale osobne si myslim,
ze by melo platit to, co u exceptions: ze se nemaji pouzivat k reseni logickych tj. predvidatelnych chyb, napr. deleni nulou tj. neosetrovat to ex post. Takze IMHO spravne je to vsechno otestovat a zobrazit BFU a pak teprve vykonat SQL command. Proto temer kazdy framework ma nejakou podporu pro validaci dat a data validuje predem.
Ale samozrejme nevidel jsem vsechno, ani jsem se o to nezajimal.
Stanislav Hruška:
//Takze IMHO spravne je to vsechno otestovat a zobrazit BFU a pak teprve vykonat SQL command.
Veď to tak robím a vraj to mám zmeniť :-[
Pri kontrole dát na klientovi je knotrala v DB už len akousi poistkou. Bavím sa len o dátach.
Navigace
[0] Seznam témat
[#] Další strana
Přejít na plnou verzi