Mai multe despre cimpuri

Scopul acestui capitol

Acest capitol trateaza urmatoarele caracteristici ale cimpurilor:


Atributele editorului

Permit controlul cimpurilor "pop-up"

Atributele editorului - Definirea unui cimp "pop-up"

In mod normal, orice cimp are un echivalent "pop-up" care e afisat de fiecare data cind utilizatorul apasa tasta [Edit], selecteaza optiunea "Edit" din meniul principal sau procedura EDIT_FIELD este apelata de un trigger.

Cimpurile "pop-up" nu inlocuiesc cimpul propriu-zis, ci mai degraba sint un supliment al acestuia. Scopul unui asemenea cimp este sa permita operatorului sa foloseasca editorul SQL*Forms pentru introducerea sau modificarea datelor.

Butonul "Editor Attributes" dintr-o forma de definitie pentru un cimp afiseaza o fereastra de dialog ( ca mai jos ) care permite controlul partial asupra cimpului "pop-up".

        ------------------------------------------------------------
        |                                                          |
        | Field Editor Location X: ________  Y: ________           |
        |                                                          |
        | [ X ] Word Wrap                                          |
        |                                                          |
        ------------------------------------------------------------

Accesarea unui cimp "pop-up"

Cind SQL*Forms (RunForm) ruleaza, apasati [Edit] pentru afisarea versiunii "pop-up" a cimpului curent. Pentru editare folositi aceleasi taste ca si in zonele SQL*Forms (Design). Apasind [Edit] pentru a doua oara (sau apasind [Accept] va inchide fereastra, salvind orice modificari operate asupra cimpului.[Exit] va inchide de asemenea fereastra, dar modificarile sint pierdute in acest caz.


Aflarea dimensiunii unui cimp "pop-up"

Dimensiunea obisnuita a unui "pop-up" este data de tipul de data ( daca acesta e LONG ) sau de lungimea cimpului ( daca nu e de tip LONG).


Masti de format

Precizeaza cum va fi afisat un cimp de catre SQL*Forms


Mastile de afisare


Acestea permit specificarea unei anume masti de format pentru un cimp.



Alte caracteristici ale cimpurilor



Valoarea implicita

Este valoarea pe care SQL*Forms o atribuie cimpului fiecarei noi inregistrari. Operatorul poate schimba aceasta valoare daca doreste asa ceva.

Valoarea implicita poate fi de urmatoarele tipuri:

Generarea automata a numerelor de secventa

Cind definiti valoarea implicita pentru un cimp, aceasta poate fi o referinta catre un "numar curent" in baza de date. Aceasta inseamna ca SQL*Forms Versiunea 3 va scrie aceste numere, generate automat, in cadrul cimpului.

Verificarea limitelor


O definire corecta a acestei caracteristici consta in doua valori care determina valoare maxima ( High ) si minima ( Low ) permisa intr-un cimp. Astfel SQL*Forms va permite introducerea in cimpul respectiv a acestor doua valori sau a oricarei valori valide situata intre ele.

Enforce Key Field Characteristic

Aceasta indica de unde provine valoarea pe care SQL*Forms o va folosi pentru umplerea unui cimp. Intrarile de acest tip vor consta in numele blocului si al cimpului de unde SQL*Forms trebuie sa citeasca valoarea.

Lista valorilor



Exemple:

        SELECT DISTINCT job
        INTO: emp.job
        FROM  emp
        ORDER BY job

---------------------------------------------------------------------------
|                                                                         |
|                   SWEEMEY TODD'S BEAMSPROUT FACTORY                     |
|                                                                         |
| -- D E P A R T M E N T ------------------------------------------------ |
| |                                -------------------                  | |
| |    Dept. No:  10   Name: ACCOUN|  Valid Jobs     | NEW YORK         | |
| ---------------------------------|                 |------------------- |
|                                  | Find: *         |                    |
|                                  |-----------------|                    |
| -- E M P L O Y E E S ------------| | ANALYST       |------------------- |
| |                                | | CLERK         |                  | |
| | ID   Surname        Job        | | MANAGER       |y Commission Gr.  | |
| | 7782 CLARK          MANAGER    | | PRESIDENT     |0            3    | |
| | 7839 KING           PRESIDENT  | | SALESMAN      |0            5    | |
| | 7934 MILLER         CLERK      | |               |0            2    | |
| |                                -------------------                  | |
| ----------------------------------------------------------------------- |
|                                                                         |
| Press DO to pick selection, PF4 to cancel                               |
---------------------------------------------------------------------------



Caracteristica "Lista de valori"

Pina acum ati vazut si folosit o lista de valori "pop-up" in timpul rularii. Aceasta caracteristica e folosita pentru definirea unei asemenea liste si e descrisa in detaliu in paginile urmatoare. A lista "pop-up" mai e denumita si o lista tip "V3", deoarece acest concept a fost introdus odata cu versiunea 3.0 a SQL*Forms.

Un tip mai vechi de lista de valori ( stilul "V2" ) este acceptat, dar e mai putin "prietenos". Pentru mai multe detalii asupra acestui tip consultati "SQL*Forms Designer's Reference".

Consideratii asupra listei de valori



De exemplu, urmatoarea lista creaza o lista de valori pentru cimpul DEPTNO, afisind de asemenea si numele departamentului (dname) pentru referinta. Oricum, numai numarul departamentului este selectat in forma:

        SELECT deptno, dname
        INTO: EMP.deptno
        FROM dept



Caracteristica "cimp de comentariu"


Acest cimp poate contine informatii generale despre cimpuri, ca si o descriere a caracteristicilor acestora.

Asigurati-va ca toate cimpurile care nu sint create implicit sint documentate aici.

Utilizarea posibilitatii de validare implicita a unui cimp


In capitolul urmator vom incepe tratarea triggerelor pentru asignarea de valori si validarea cimpurilor. Cu toate ca triggerele ofera un mecanism de validare destul de sofisticat, retineti ca validarile la nivel de cimp descrise in acest capitol sint efectuate INAINTE de activarea oricarui trigger pe cimp. Din aceasta cauza trebuie sa va asigurati ca utilizatorul va vedea erorile cit se poate de repede.

Cimpuri neafisabile si pagina 0


Cind un cimp e folosit pentru a memora informatie ce trebuie sa fie sau invizibila sau indiferenta utilizatorului, puteti muta acest cimp in pagina 0. Pagina 0 este un fel de "ciorna" si nu este afisata niciodata. Este creata de SQL*Forms, asa ca de obicei nu aveti nevoie sa o accesati din aria de definitie a ecranului ( Screen Painter ).

Pentru a muta cimpurile in pagina 0, pur si simplu puneti caracteristica "Numar de pagina" pe 0 sau NULL.

Cimpurile "Foreign Key" sint puse de obicei in pagina 0. Fiecare block are pagina lui 0, separat de celelalte.

Vizualizarea paginii 0


Nu se poate ajunge la pagina 0 din editor folosind functiile [Next Page] sau [Previous Page]. Daca totusi doriti sa vedeti cimpurile din pagina 0, selectati contextul blocului si cautati in meniu submeniul "Image", optiunea "Painter". Tastati 0 in cimpul "numar de pagina" si apoi [Accept]. Folositi acelasi mecanism si pentru iesirea din pagina 0.

Exercitii pt. Capitolul 8.



Exercitiul A. Atributele cimpurilor.



  1. Operati urmatoarele modificari asupra cimpurilor din blocul ORD:
            ORDID           Implicit: secventa nextval din ordid.
                            De-selectati atributul "Input Allowed" (modificare
                            permisa).
    
            ORDERDATE       Implicit: data curenta.
                            Modificati formatul astfel incit sa se afiseze
                            1-FEB-90 ca 01/02/90.
                            Schimbati lungimile cimpului si afisarii in 8.
    
            SHIPDATE        Lungimi si format ca si ORD.ORDERDATE.
                            Nu exista valori implicite.
    
            TOTAL           Modificati formatul sa afiseze maximum 6 digiti la
                            stinga virgulei si 2 in dreapta ei.
    


  2. Realizati urmatoarele modificari asupra cimpurilor din blocul ITEM:
            SCR_STDPRICE    Format ca ORD.TOTAL
    
            ACTUALPRICE     Format ca ORD.TOTAL
    
            ITEMTOT         Format ca ORD.TOTAL
                            Dezactivati atributul "Input Allowed".
    


  3. Verificati daca valoarea din COMMPLAN este in majuscule si permite doar valorile A, B, C.

  4. Faceti cimpul TOTAL din blocul ORD sa nu accepte intrari.

  5. Mutati cimpul ORDID din blocul ITEM in pagina 0. Modificati dimensiunea SCR_DESCRIP pentru ocuparea spatiului ramas liber.


Exercitiul B: Crearea listelor de valori.



Nota: Erorile din listele de valori sint detectate doar la generare. Asigurati-va ca generarea a decurs fara erori.

  1. Creati o lista de valori pentru ITEM.PRODID care:
    1. sa aiba titlul "Products"
    2. sa apara pe ecran la X(25) si Y(4).
    3. sa selecteze PRODID si DESCRIP din tabela PRODUCT, in cimpuri ecran, ordonate dupa coloana DESCRIP. In lista, afisati descrierea produsului urmata de identificatorul acestuia ( DESCRIP ar trebui selectat in cimpul SCR_DESCRIP ).


  2. Creati o lista de valori pentru ORD.CUSTID:
    1. dati-i titlul "Customers"
    2. lasati valorile implicite pentru X si Y
    3. afisati CUSTID, NAME si CREDITLIMIT.
    4. selectati numai CUSTID si NAME in forma ( NAME trebuie selectat pentru cimpul SCR_NAME ).
    5. folositi tabela CUS.


       Si, daca mai aveti timp:

  3. Creati o lista de valori pentru CUS.REPID:
    1. titlul sa fie "Sales People"
    2. sa apara pe ecran la X(69) Y(9)
    3. afisati numai numele si numerele persoanelor din departamentul vinzari. Numele ar trebui sa inceapa cu majuscule si sa fie ordonate alfabetic.
    4. selectati numai numarul angajatului in forma.
    5. folositi tabela EMP.



Sugestie: Aveti grija sa specificati referintele la cimpuri cu numele blocului ( ex: ORD.CUSTID, nu :CUSTID ), deoarece exista un alt CUSTID in blocul CUS.

Solutii ( Capitolul 8 )



Exercitiul A: Atributele cimpurilor


        1.      ORDID   Valoare implicita: :sequence.ordid.nextval
                ORDERDATE  Val. implicita: $$date$$
                          Masca de format: dd/mm/yy
                SHIPDATE  Masca de format: dd/mm/yy
                TOTAL     Masca de format: 999999.99

        2.      STDPRICE  Masca de format: 999999.99
                ACTUALPRICE         Masca: 999999.99
                ITEMTOT             Masca: 999999.99

        3.      COMMPLAN  Atributul "Uppercase" (Majuscule) selectat.
                          Interval valid: Low: A    High:C

        4.      TOTAL     "Input Allowed" si "Update Allowed" deselectate.

        5.      ORDID     Schimbati numarul paginii in 0.
                SCR_DESCRIP Schimbati lungimea display-ului la 22.


Exercitiul B: Crearea listelor de valori

        1. Lista de valori pentru PRODID

----------------------------------------------------------------------------
| Field Name:         PRODID                                               |
| Sequence Number:    2    Data Type:     NUMBER    ( Select Attributes )  |
| Field Length:       6    Query Length:  8         Display Length: 6      |
| Screen Position: X: 10   Y: 13   Page:  1         ( Editor Attributes )  |
| Format Mask:                                                             |
| Default Value:                                                           |
| Hint: Enter value for : PRODID                                           |
| Valid Range: Low:                          High:                         |
| Enforce Key:                                                             |
| List of Values: Title: Products                    Pos: X: 25   Y: 4     |
|--------------------------------------------------------------------------|
|------------------------ List of Values SQL Text -------------------------|
| select descrip, prodid into :item.scr_descrip, :item.prodid              |
| from product order by descrip                                            |
----------------------------------------------------------------------------

        2. Lista de valori pentru CUSTID

----------------------------------------------------------------------------
| Field Name:         CUSTID                                               |
| Sequence Number:    4    Data Type:     NUMBER    ( Select Attributes )  |
| Field Length:       6    Query Length:  8         Display Length: 6      |
| Screen Position: X: 21   Y: 6    Page:  1         ( Editor Attributes )  |
| Format Mask:                                                             |
| Default Value:                                                           |
| Hint: Enter value for : CUSTID                                           |
| Valid Range: Low:                          High:                         |
| Enforce Key:                                                             |
| List of Values: Title: Customers                    Pos: X:     Y:       |
|--------------------------------------------------------------------------|
|------------------------ List of Values SQL Text -------------------------|
| select custid, name, creditlimit into :ord.custid, :ord.scr_name         |
| from cus                                                                 |
----------------------------------------------------------------------------

        3. Lista de valori pentru REPID

----------------------------------------------------------------------------
| Field Name:         REPID                                                |
| Sequence Number:    9    Data Type:     NUMBER    ( Select Attributes )  |
| Field Length:       6    Query Length:  6         Display Length: 6      |
| Screen Position: X: 20   Y: 16   Page:  2         ( Editor Attributes )  |
| Format Mask:                                                             |
| Default Value:                                                           |
| Hint: Enter value for : REPID                                            |
| Valid Range: Low:                          High:                         |
| Enforce Key:                                                             |
| List of Values: Title: Sales People                Pos: X: 60   Y: 9     |
|--------------------------------------------------------------------------|
|------------------------ List of Values SQL Text -------------------------|
| select empno, initcap(ename) into :cus.repid                             |
| from emp where job = 'SALESMAN' Order by ename                           |
----------------------------------------------------------------------------