Acest capitol este introdus pentru a va putea familiariza cu interfata
de operare a SQL*Forms (Runform). Este esential sa intelegeti cum
opereaza o forma pentru a putea construi o aplicatie user-prietenoasa.
Daca sunteti un utilizator final, invocati SQL*Forms (Runform) prin
editarea urmatoarei comenzi la prompt-ul sistemului de operare:
runform form_nameApoi sunteti introdus intr-un ecran de securitate care va va cere userid-ul (de Oracle) si parola. altfel, daca securitatea nu este asigurata, puteti introduce userid-ul/parola in comanda runform din linia de comanda:
runform form_name scott/ocelot
Pentru dumneavoastra, ca proiectant, este mai placut sa rulati o forma din interfata SQL*Forms (Design). In acest caz, sunteti deja logat ca un user Oracle si trebuie sa selectati doar Execute din meniul Action al SQL*Forms.
Este de asemenea posibil sa invocati Runform din SQL*Plus. Introduceti
RUNFORM la prompt-ul SQL*Plus. Va fi folosit login-ul curent de
Oracle.
O forma contine blocuri care sunt afisate pe una sau mai multe pagini.
Puteti trece de le un bloc la altul apasand cheile [Next Block] si
[Previous Block]. Intr-un bloc folositi cheile [Next Field] si
[Previous Field] pentru a muta cursorul de la un camp la altul. Toate
aceste patru chei lucreaza in mod circular; de exemplu, daca sunteti la ultimul
camp al inregistrarii, apasand [Next Field] va veti duce pe primul camp
din inregistrare. In Runform nu exista cheile [Next Page] si
[Previous Page]. O pagina se va afisa cand cursorul se muta pe un camp
din pagina. Cu alte cuvinte, apasand una din cheile mentionate anterior se va
afisa o pagina diferita daca obiectul tinta (camp sau bloc) este in acea
pagina.
Dupa cum am mentionat anterior, SQL*Forms este condus de functia cheii
si pentru ca ruleaza pe multe platforme hardware, cheile de miscare folosite
pentru a executa o functie depind de terminalul folosit. Din acest motiv,
cartea refera cheile prin functia lor si nu prin nume. Cea mai importanta cheie
de localizare este [Show Keys], care afiseaza o lista completa a cheilor
disponibile user-ului in orice moment.
Un ecran tipic SQL*Forms afiseaza text explicativ, elemente grafice si
campuri care accepta valori de date. In partea de jos a ecranului se afla linia
de mesaj si linia de stare.
_______________________________________________________ | | | --------------------------------------------------- | | ORDERS | | | | Order ID 610 Order Date 07 JAN 87 | | Client ID Client Number TKB SHOP | | --------------------------------------------------- | | ITEMS | | | | OrderID ItemNo Code ActPrice Quantity ItemTotal | | 610 1 100860 35.00 1 35.00 | | 610 2 100870 2.80 3 8.40 | Message | 610 3 100890 58.00 1 58.00 | Line-----|-->FRM 42531 Enter a query pFind to execute&F4to cancel| Status---|-->Count:=0 ENTER QUERY Replace | Line |_______________________________________________________|
Linia de mesaj afiseaza atat mesaje SQL*Forms cat si mesaje specifice
aplicatiei.
Linia de stare
De la stanga la dreapta, linia de stare poate contine:
Adesea un operator foloseste o forma doar pentru a cere informatii de
la baza de date. Puteti face efectiv cereri prin SQL*Forms fara a avea
cunostinte de sintaxa SQL. Pe de alta parte, daca sunteti un user experimentat
de SQL, este posibil sa completati procesarea implicita SQL*Forms cu propriile
dumneavoastra predicate SQL. Exista doua tipuri generale de cereri:
Camp Valoare Comentarii ----- -------- ----------- EMPNO 7902 urmareste potrivirea exacta. 7800 introducere valida a unui numar de camp. %900 implicat operatorul LIKE. ENAME JONES nu sunt necesare cote. _R% implicat operatorul LIKE. HIREDATE 10-jan-90 urmareste potrivirea exacta. <10-jan-90 nu are nevoie de cote. SAL 3000 urmareste potrivirea exacta. <>3000 urmareste nepotrivirea exacta! #between 1200 # permite operatori SQL. and 2000 JOB MANAGER urmareste potrivirea exacta :J asigneaza campului un nume variabil cu J si produce mutarea lui QUERY WHERE pentru afisare. : asigneaza campului un nume de variabila implicit (:1,:2,etc) si produce mutarea lui Query Where pentru afisare.
Exemple de conditii valide de cautare sunt expuse in pagina anterioara.
Blocul este bazat pe tabela EMP. Dupa ce sunt introduse valorile/conditiile de
cautare, user-ul apasa [Execute Query].SQL*Forms va construi o declaratie de
selectie, care reprezinta un SI logic intre toate conditiile specificate.
Iata cateva puncte de referinta despre conditiile de cautare:
In timpul introducerii unui criteriu de cautare intr-o forma, cand
operatorul tipareste o coloana (:) in pozitia primului caracter al
campului, este triggerat mecanismul Query Where din SQL*Forms. La
introducerea lui :J ( pe pagina opusa), de exemplu, coloana prefix
identifica pe J ca variabila care poate fi folosita pentru a referi
coloana JOB in Query Where pe care SQL*Forms il afiseaza acum.
Folositi Query Where pentru:
Pentru a restrictiona cererea la angajatii care detin slujba de MANAGER sau PRESIDENT, user-ul introduce urmatoarele informatii:
_____________________________________________________________ | | | SWEENEY TODD'S BEANSPROUT FACTORY | | --DEPARTMENT--------------------------------------------- | | | Dept. No.: Name: Location: | | | |_________________________________________________________| | | _____________________________________________________ | | _| Query Where |_ | | | | | | | | | | Criteria: :j = 'MANAGER' OR :j = 'PRESIDENT' | | | | | | | | | | | |_____________________________________________________| | | | |_________________________________________________________| | | | | Press Do to execute query, PF4 to return to enter query mode| | Count: *0 ENTER QUERY Replace | |_____________________________________________________________| Fig.2.1: Folosirea lui Query Where
User-ul apasa apoi [Accept] pentru a executa cererea. SQL*Forms va face un SI logic intre conditiile Query Where si orice alte conditii introduse in campuri si va formula o declaratie de selectie. Query Where poate fi folosit si pentru a specifica o coloana sau mai multe pentru a ordona datele asa cum se arata in urmatorul exemplu:
____________________________________________________________ | | | | | ____________________________________________________ | | _| Query Where |_ | | | | | | | | | | Criteria: ORDER BY :J | | | | | | | | | | | |____________________________________________________| | | | |________________________________________________________| | | | | | |____________________________________________________________| Fig.2.2:Folosirea lui Query Where pentru a ordona linii
Puteti prescurta procesul de asignare de nume variabile campurilor doar prin introducerea unei coloane (:) in fiecare camp pe care doriti sa-l referiti in Query Where; in acest caz, referiti campurile prin numere (:1, :2, etc.). De exemplu, daca plasati o coloana in campurile EMPNO, JOB si HIREDATE, introducerea dvs. in Query Where poate arata astfel:
____________________________________________________________ | | | | | ____________________________________________________ | | _| Query Where |_ | | | | | | | | | | Criteria: :J = 'MANAGER' and :3 > '31 dec 60' | | | | | | order by :1 | | | | | | | | | | | |____________________________________________________| | | | |________________________________________________________| | | | | | |____________________________________________________________| Fig.2.3:Nume variabile implicite in Query Where
Urmatoarele exemple prezinta functiile Forms care trebuie folosite pentru a extrage seturi de date din baza de date si apoi declaratiile SQL construite de SQL*Forms pentru a realiza refacerea.
Declaratie SQL Functie SQL*Forms -------------- ----------------- SELECT * FROM EMP [Execute Query] SELECT * FROM EMP 1. [Enter Query] WHERE JOB = 'CLERK' 2. [Next Field] in campul job AND... 3. Tastati in plus parametrii cererii care corespundcampurilor 4. [Execute Query] SELECT COUNT (*) 1. Setati conditiile Enter Query daca doriti FROM EMP 2. Apasati [Count Query Hits] in loc de [Execute Query] SELECT * FROM EMP 1. [Enter Query] WHERE HIREDATE BETWEEN 2. Tipariti :D (sau :) '1-JAN-91' AND 3. [Execute Query] '30-APR-91' 4. In partea de sus tastati: :D between '1-JAN-91' AND '30-APR-91' 5. [Accept/Commit] executa cererea
_______________________________________________________________ | | | ___________________________________________________________ | | | Error Screen | | | |-----------------------------------------------------------| | | | | | | | Trigger statement in error: | | | | SELECT DEPTNO, EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM| | | | ROWID FROM EMP WHERE < HIREDATE between 1jan90 and 1jan91>| | | | | | | | Error: | | | | ORA-00904: invalid column name | | | | | | | |___________________________________________________________| | | | Please acknowledge screen OK | | | |___________________________________________________________| | | Count: *0 ENTER QUERY Replace | |_______________________________________________________________| Fig.2.4:Afisarea erorii pe ecran
- creeze spatiu pentru inserare - activeze duplicatul camp/inregistrare
La intrarea intr-o forma tipica sunteti in modul insert. Orice cheie de
miscare QWERTY faceti este interpretata de SQL*Forms ca o incercare de
inserare a unei noi inregistrari. Deci, in scopul inserarii unei noi
inregistrari, tot ce se cere este sa incepeti sa tastati!
Exista o
cheie numita [Create Record] care este folosita cand exista
inregistrari afisate pe ecran si cand doriti sa creati spatiu pentru o
noua inregistrare in locatia curenta a cursorului. Nu este nevoie sa
folositi aceasta cheie daca cursorul se afla deja pe o inregistrare
vida.
In scopul executiei actiunii de update asupra unei linii din baza de
date, trebuie mai intai sa executati o cerere pentru a afisa linia.
Faceti inregistrarile dorite in inregistrarea de pe ecran.
Stergerea inregistrarilor
Ca si la update, trebuie sa cereti mai intai ca linia sau liniile sa
fie sterse. Apasati [Delete] pentru a muta inregistrarea pe ecran si
marcati-o pentru stergere.
Schimbari permanente
De fiecare data cand doriti sa realizati o operatie DML folosind
SQL*Forms, lucrati cu o copie a tabelelor din baza de date. Pentru a
putea face inserare, update sau stergere permanenta trebuie sa le
'commit' din baza de date. Pur si simplu apasati [Commit].
Daca mesajul
FRM-40400: Transaction complete --1 records posted and
commited
apare in linia de mesaj, veti sti ca baza de date a fost update-ata.
Folosirea functiilor SQL*Forms pentru a executa DML
Declaratie SQL Functie SQL*Forms -------------- ----------------- UPDATE EMP 1. Cererea inregistrarii lui SMITH SET SAL = 500 2. [Next Field] in campul Sal WHERE ENAME = 'SMITH' 3. Modificare intrare la 500 4. [Commit] scrie modificarile in baza de date INSERT INTO EMP 1. Tipariti in noua inregistrare a angajatului (...) VALUES (...) 2. [Commit] scrie inregistrarea in baza de date Nota: Modul INSERT este modul implicit SQL*Forms. Daca forma nu este in Enter Query Mode SI cursorul este pe o inregistrare vida, sunteti in modul INSERT. DELETE FROM EMP 1. Cererea inregistrarii lui SMITH WHERE ENAME = 'SMITH' 2. [Delete Record] 3. [Commit] muta inregistrarea din baza de date COMMIT [Commit] ROLLBACK [ClearForm/Rollback]Iesirea dintr-o forma
1. Apasati [Exit/Cancel]
Daca nu suntem in timpul unor modificari, va veti intoarce in locul
care ati invocat RUNFORM. Daca, cumva, au ramas modificari
neefectuate SQL*Forms va va cere intr-o cutie de dialog sa le
realizati sau sa le anulati inaintea iesirii din forma.
EXECUTAREA COMENZILOR FOLOSIND SELECTIILE DIN MENU
Linia de sus a figurii de mai jos reprezinta meniul care se afiseaza de
fiecare data cand apasati [Menu] in SQL*Forms(Runform). Fiecare
selectie de meniu principal reprezinta un submeniu pull-down; submeniul
Action este prezentat mai jos:
____________________________________________________________ | Action Edit Block Field Record Query Help | | -------------Sweeney Todd's Beansprout Factory------------ | | _|Rollback| ENT ________________________________________ | | | |Commit | | | | | |reFresh | Name: ACCOUNTING Location: NEW YORK | | | | |Print | | | | | |Exit | | | | |_|________|_____________________________________________| | | | | ___EMPLOYEES____________________________________________ | | | | | | | ID Surname Job Mgr# Started Salary Commision Gr| | | | 7782 CLARK MANAGER 7893 09/06/81 2450.00 3 | | | | 7839 KING PRESIDENT 17/11/81 5000.00 5 | | | | 7934 MILLER CLERK 7782 23/01/82 1300.00 2 | | | |________________________________________________________| | | | | Count: 1 Replace | |____________________________________________________________| Fig.2.5:Meniul de operare al SQL*Forms
In figura de mai jos, fiecare submeniu este afisat sub alegerea din meniu. Bineinteles, in modul run, doar un subeniu poate fi afisat la un moment dat.
Action Edit Field Block Record Query Help ------ ---- ----- ----- ------ ----- ---- Rollback Cut Previous Previous Previous Enter Help Commit cOpy Next Next Next eXecute Keys reFresh Paste Clear Clear scroll Up Last criteria List Print Edit Duplicate Scroll down Cancel Display Exit Clear count Hits Remove Fetch next set Insert Duplicate Lock
Doar daca nu este dezactivat in mod explicit de catre proiectant, un meniu de operare este disponibil in fiecare forma.
User-ul poate forta afisarea meniului principal prin apasarea cheii [Menu]. Meniul apare de-a lungul partii de sus a ecranului si prima selectie din meniu, Action, este supraluminata. Fiecare selectie din meniu reprezinta un submeniu pull-down de comenzi.
Cele mai multe chei de operare au o selectie de meniu echivalenta. Un
user neexperimentat poate deveni as in SQL*Forms Version 3 fara a
trebui sa invete multe functii de chei.
Meniul principal este prezentat mai jos:
Action Edit Block Field Record Query Help -----------------------------------------------Exista cateva cai de selectare a unei optiuni din meniu:
O lista de valori este o fereastra care apare pe ecran care permite user-ului sa vizualizeze, sa caute sau sa copieze valorile valide curente ale campului. De fiecare data cand o lista de valori este disponibila campului curent, va fi luminat coltul din dreapta-jos al ecranului. Pentru a accesa lista, apasati [List].
______________________________________________________________ | | | SWEENEY TODD'S BEANSPROUT FACTORY | | ____DEPARTMENT____________________________________________ | | | ______________ | | | | Dept. No.: 10 Name: | Valid Jobs | | | | |_______________________| |___________________| | | | Find: | | | ____EMPLOYEES__________|______________|___________________ | | | |_| ANALYST | | | | | | | CLERK | | | | | | | MANAGER | | | | | ID Surname Job | | PRESIDENT |y Commission Gr | | | | 2782 CLARK MANAGER | | SALESMAN |0.00 3 | | | | 7839 KING PRESIDENT| | |0.00 5 | | | | 7934 MILLER CLERK |_| |0.00 2 | | | | |_|____________| | | | |__________________________________________________________| | | | | | |______________________________________________________________| Fig.2.6:Exemplu de lista de valori
Pentru a face o selectie intr-o lista, folositi cheile [Down] si
[Up] pentru a va muta pe selectia dorita si apasati [Accept].
Restrictionarea listei de valori
Este posibil ca intr-o fereastra a listei sa faceti restrictii folosind facilitatea FIND. Folositi cheia [Next Field] pentru a va muta in campul FIND si introduceti o restrictie. Un % va fi apendad la sfarsitul fiecarei conditii de cautare. Folositi wildcard-uri unde 'ajutati' in mod necesar cautarile. Cand ati introdus conditia de cautare apasati [Next Field] sau [List] pentru a afisa lista astfel restrictionata.
__________________________ | ____________ | | Find: | | | 2 Inroduceti valorile de 1 -->| |____________| |--- cautare | |__________________________| | | | | | |---| |< --| 3 [Next Field] Next Field | | or [List] | | |__________________________|
Daca sunt intoarse mai multe selectii, alegeti-o pe cea dorita folosind
[Down]. Apasati [Accept] pentru a copia selectia in
ecranul campului.
Editor de texte pentru campurile pop-up
Fiecare camp introductibil pe ecran are o versiune pop-up care apare de fiecare data cand mutati cursorul pe camp si apasati [Edit]. Editarea ofera facilitati de suprimare, adaugare, cautare si cautare cu inlocuire.
Este in mod particular folositor pentru campurile de tip long sau char.
Pentru a accesa un editor pentru un camp particular:
Bineinteles ca si alte chei de editare precum cheile cursorului,
[Insert Replace], [Delete Character] si [Delete Backward] sunt folosite
in editorul campului pop-up.
Cutii Alert
Toate prompturile SQL*Forms apar intr-o cutie de dialog Alert. Alert este o fereastra care apare in mijlocul ecranului, acoperind partial afisajul curent. Alert-urile va indica o conditie rezultata in timpul ultimei actiuni. Trebuie sa raspundeti la aceasta conditie in ordinea in care a provenit.
_______________________________________________________________ | | | SWEENEY TODD'S BEANSPROUT FACTORY | | _______DEPARTMENT__________________________________________ | | | | | | | Dept. No.: 10 Name: ACCOUNTING Location: NEW YORK | | | |___________________________________________________________| | | _______________________________________________ | | __EMPL| |____ | | | | CAUTION | | | | | ID | |n Gr| | | | 7782 | Do you want to commit the changes ? | 3 | | | | 7839 | | 5 | | | | 7934 | Yes No Cancel | 2 | | | |______|_______________________________________________|____| | | | | | | Press Tab to move between choices, Select to select | | Count: 1 Replace | |_______________________________________________________________| Fig.2.7: O cutie Alert
De exemplu, cand apasati [Enter Query] pentru modificari, fereastra
Alert prezentata mai sus va apare pe ecran. Trebuie sa selectati (Yes)
care va face modificarile, (No) ca sa le anulati, sau (Cancel) care
lasa modificarile nealterate inainte sa se produca procesarea.
Capitolul 2 Exercitii
runform fm3_demo userid/password
Dupa ce forma a aparut pe ecran, observati meniul de comanda din
partea de sus a paginii. Puteti folosi oricare din functiile cheie
din meniu pentru a executa comenzi sau apasati o cheie functioanala.
Va apare pe ecran o fereastra care prezinta o lista de functii si
cheile lor corespunzatoare. Sageata in jos din partea stanga-jos a
ecranului indica ca exista mai multe inregistrari de afisat. Apasati
[Scroll Down] pentru a vedea restul listei. Apasati
[Select]
pentru a va intoarce in forma.
Apasati [Execute Query].
Pe ecran va apare order 601 cu optiunile asociate.
Retineti ca, cand se afiseaza o noua inregistrare, liniile de
relatare sunt si ele automat afisate. Blocurile ORD si ITEM sunt
legate printr-o relatie "master/detail" care e specificata
programatorului in momentul in care blocurile au fost create.
Observati ca valorile implicite pentru Order Number, Date Ordered si
Commplan au fost sterse. Campurile implicite sunt utile pentru
inserarea de noi inregistrari, dar nu au influenta asupra cererilor.
Faceti cautari dupa: Inregistrarile intoarse: a. Order Number 612 1 b. Order Date sau dupa 1 January 1987 12 c. Order Total intre 500 si 1500 5 d. Commplan B 3
Apasati [Enter Query] de doua ori pentru a trimite ultimul criteriu
de cerere. Apoi apasati [Count Query Hits] pentru a afla cate
inregistrari satisfac conditia de cerere. Va aflati inca in modul de
interogare. Apasati [Cancel] pentru a anula cererea.
Afisati order 612 pe ecran. Mergeti la blocul Item si executati o cerere sa afisati toate item-urile cu criteriul Quantity mai mare decat 100. Va trebui sa gasiti doar 1.
Mutati cursorul in blocul Orders si curatati blocul. Observati ca
noua inregistrare este deja umpluta cu valori. Acestea includ:
Puteti scrie altceva in Orderdate si Commplan pentru ca aceste campuri
permit acest lucru. Orderid este un camp in care nu se pot introduce
valori si din acest motiv nu poate fi modificat.
Veti cauta pe Vollyrite, dar nu stiti cum sa ajungeti la el. Cautati
toti clientii al caror nume incepe cu VOL tastand vol in campul de
intrare si apoi apasand [Next Field]. Lista se va reafisa, aratand
unicul client al carui nume satisface cautarea.
No. Code Descrip Price StdPrice Qty Itemtot --- ---- ------------------- ------- --------- ---- -------- 1 100861 ACE TENNIS RACKETS 45 45 50 2250 Poate ati observat deja cateva lucruri care s-au intamplat in timpul tastarii: a. O lista de valori pentru codul produsului a aparut la intrarea in campul cod. b. Valorile pentru pretul standard, si campurile item total au aparut automat. c. In blocul Order, campul Total a fost update-at pentru a reflecta item total. d. Campurile de bani sunt automat formate cu puncte zecimale. Formarea campurilor se face prin definirea de masti format pentru campuri. Alte actiuni sunt realizate prin parti de cod numite Triggere.
Cursorul este plasat imediat dupa inregistrarii pe care abia ati
creat-o. Apasati [Duplicate Record]. Acum aveti o a doua linie item
identica cu prima. Modificati numarul item la2 si pretul actual la
30; acest pret va fi respins pentru ca este mai mic decat 80% din
pretul standard. Imbunatatiti-l.
Apasati [Commit]. Cele 3 noi inregistrari au fost scrise in baza de
date.
Mergeti in blocul Order si updatati noua inregistrare prin tastarea
datei curente in campul Ship Date. Faceti (commit) modificarea.
SQL*Forms va informeaza daca nu puteti sterge un order cand linia
items exista. Acesta este alt trigger de lucru, protejand
integritatea tabelelor.
Mergeti in blocul Item si apasati [Delete Record] de doua ori.
Inregistrarile sunt sterse de pe ecran, dar nu si din baza de date.
Apasati [Commit] pentru a face stergeri permanente. Acum stergeti
order-ul.
:ship between '01-jan-87' and '30-jun-87'
Secventa se face automat, prin folosirea valorii urmatoare dintr-o
secventa Oracle Version 6 ca valoare implicita.
Customer Name: SCOTT'S SPORTING GOODS Street Address: 100 Davis Dr. Town: Street County: Somerset Pcode: ST54EL Phone: 598-8888
Campul de comentarii este un camp long in baza de date. SQL*Forms
accepta campuri de tipul long. In plus, accepta un editor pentru
toate campurile. Puteti folosi editorul cand este afisata versiunea
pop-up a unui camp.
[Beginning Line] [Copy] [Cut] [Delete Line] [End of Line] [First Line] [Last Line] [Paste] [Search] [Select]
Exista solutii neformale a acestor exercitii.