Databáze > Firebird a Interbase

Otázky začínajúceho 2

(1/3) > >>

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