Acest capitol trateaza urmatoarele caracteristici ale
cimpurilor:
Permit controlul cimpurilor "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 | | | ------------------------------------------------------------
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.
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).
Precizeaza cum va fi afisat un cimp de catre SQL*Forms
Masca: Afisat ca: 0"-"0"*"0 1-2*3 ZZ/LL/AA 01/12/89
ZZ/LL/AA $99,999.99
"("099")"099"-"0999
- RICHMOND - $$DATE$$ - :ORD.ORDID - :SEQUENCE.deptnum.NEXTVAL
- Range Check: Low: 1 High: 100 - Range Check: Low: A High: C - Range Check: Low: High: $$DATE$$
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:
( $$DATE$$ si $$TIME$$ sint variabile SQL*Forms care dau data,
respectiv timpul curent; $$DATETIME$$ le da pe amindoua. )
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.
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.
Enforce Key: ORD.ORDID ------------------------------ | ORD | |----------------------------| | ------ | | Ordid | 100|___|__ | ------ | \ | | \ --------------------------------...\....... | ITEM | \ . |------------------------------| | . | | ------ . | | | 100| . | | ------ . | | . --------------------------------...........
Titlu Titlul pus de SQL*Forms in capul listei. Pozitie Pozitia listei pe ecran. Lista de Defineste ceea ce apare efectiv in valori lista de valori. SQL text
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 | ---------------------------------------------------------------------------
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
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.
Nota: Erorile din listele de valori sint detectate doar la generare.
Asigurati-va ca generarea a decurs fara erori.
Sugestie: Aveti grija sa specificati referintele la cimpuri cu
numele blocului ( ex: ORD.CUSTID, nu :CUSTID ), deoarece exista un
alt CUSTID in blocul CUS.
Exercitii pt. Capitolul 8.
Exercitiul A. Atributele cimpurilor.
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.
SCR_STDPRICE Format ca ORD.TOTAL
ACTUALPRICE Format ca ORD.TOTAL
ITEMTOT Format ca ORD.TOTAL
Dezactivati atributul "Input Allowed".
Exercitiul B: Crearea listelor de valori.
Si, daca mai aveti timp:
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 | ----------------------------------------------------------------------------