Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Aplicatii profesionale in baze de date orientate obiect

baze de date



+ Font mai mare | - Font mai mic



Aplicatii profesionale in baze de date orientate obiect

Anul 1 Master "Baze de date si tehnologii web"

Laborator 1 (Oracle 9i Forms Developer)



Analizati diagrama exemplu HR (Human Resources), observand cheile primare si externe ale tabelelor, precum si relatiile dintre tabele.

Initiati o sesiune SQL*Plus. Analizati structura tabelelor din schema HR si listati continutul acestor tabele.

Exemplu:

DESC employees

SELECT * FROM employees;

Sa se creeze cate o copie a tabelelor EMPLOYEES, DEPARTMENTS, JOBS si JOB_HISTORY. Noile tabele se vor numi EMPLOYEES_PNU, DEPARTMENTS_PNU, JOBS_PNU, JOB_HISTORY_PNU, unde sufixul "PNU" este format astfel: P = prima litera din prenumele dumneavoastra, NU = primele doua litere din nume.

Sa se creeze o forma, numita F_EMP, care sa contina informatii referitoare la angajati si joburile lor precedente.

a)      Creati cu ajutorul Data Block Wizard cate un bloc de date pe baza tabelelor EMPLOYEES_PNU si JOB_HISTORY_PNU. Blocurile se vor numi BL_EMP, BL_HISTORY.

b)      Blocul BL_EMP va fi blocul master al lui BL_HISTORY.

c)      BL_HISTORY va avea layout tabelar. In editorul Layout, repozitionati elementele in mod convenabil (mai intai redimensionati canvas-ul si frame-ul).

d)      Informatiile vor fi afisate pe un canvas numit CV_EMP.

e)      Salvati forma intr-un fisier numit F_EMP.fmb.

- Executati modulul creat anterior.

Executati o cerere nerestrictionata.

Executati o cerere restrictionata pentru a gasi informatii referitoare la angajatii avand codul job-ului SA_REP.

Executati o cerere restrictionata pentru a gasi informatii referitoare la angajatii al caror job_id incepe cu litera "S" si al caror salariu este mai mare decat 2500.

Executati o cerere restrictionata pentru determinarea angajatilor al caror salariu se afla in intervalul 4500-5000 sau care au a treia litera din nume "A".

Indicatie: in item-urile corespunzatoare campurilor salary, respectiv last_name se scrie :a, :b. La executia cererii va aparea o fereastra in care se poate introduce conditia:

:a between 4500 and 5000 or lower(:b) like '__a%'

- Adaugati o noua inregistrare in blocurile corespunzatoare lui EMPLOYEES. Vizualizati, in SQL*Plus, continutul tabelului. Apare si noua inregistrare?

Salvati inregistrarea introdusa si vizualizati din nou continutul tabelului..

Actualizati data angajarii pentru inregistrarea introdusa anterior si salvati.

- Creati un nou modul de forma.

Creati un bloc singular, folosind Data Block Wizard, pe baza inregistrarilor din DEPARTMENTS si includeti toate coloanele. Blocul se va numi BL_DEP. Afisati blocul pe un canvas nou, numit CV_DEP; se va afisa cate o singura inregistrare. Titlul frame-ului va fi "departamente".

Salvati noul modul intr-un fisier numit F_DEP.

Rulati modulul si executati o cerere (sa se gaseasca departamentele al caror nume incepe cu litera M).

In Object Navigator, schimbati numele modulului in "F_DEP".

- Creati manual un bloc nou si redenumiti acest bloc Control. Setati proprietatile Database Data Block, Query Allowed, Insert Allowed, Update Allowed si Delete Allowed la valoarea "No". Setati proprietatea Query Data Resource Type la "None". Celelalte proprietati se vor lasa cu valorile lor implicite. Mutati blocul Control dupa blocul DEPARTMENTS (drag&drop in Object Navigator).

Asigurati-va ca inregistrarile corespunzatoare blocului DEPARTMENTS sunt sortate dupa codul departamentului. (ORDER BY department_id in Properties Palette)

Setati proprietatile frame-ului pentru blocul DEPARTMENTS astfel: stergeti titlul frame-ului si setati proprietatea Update Layout la Manually.

Salvati si rulati forma.

In forma (modulul) F_DEP, creati un LOV (list of values) pentru a afisa codurile locatiilor si orasele corespunzatoare. Setati proprietatea Name la ID_lov, proprietatii Title dati-i valoarea "Locatii", proprietatile X=30, Y=30, Width=200, Height=250. Pentru coloana location_id setati, ca element de intoarcere, departments.location_id.

Obs: Cu exceptia numelui formei, toate celelalte proprietati se seteaza cu ajutorul lui LOV Wizard.

Creati un buton in blocul de control al formei F_DEP; numiti acest buton ID_lov_button. Modificati-i proprietatea Label = "Locatii" si setati canvas-ul, iar apoi pozitionati corespunzator butonul in Layout Editor.

Obs: Pentru crearea butonului se poate proceda astfel: prin click pe nodul Items al blocului Control se creeaza un element nou, iar apoi, prin Property Palette se stabileste tipul elementului (Push Button), numele si label-ul.

In forma F_DEP, scrieti un trigger pentru a afisa ID_lov cand este apasat butonul ID_lov_button.

Indicatie:

Trigger WHEN-BUTTON-PRESSED la nivelul butonului ID_lov_button

IF show_lov('ID_lov') THEN null;

end if;

Creati un trigger When-Window-Closed la nivel de forma pentru a iesi din aceasta.

Indicatie:

WHEN-WINDOW-CLOSED la nivelul formei

exit_form;

Creati un bloc de control in forma F_EMP, in care adaugati un buton numit exit_button. Scrieti un trigger care determina iesirea din forma cand este selectat exit_button. Textul butonului va fi "Iesire". Unde trebuie plasat blocul de control?

Indicatie:

WHEN-BUTTON-PRESSED la nivelul butonului 'exit_button'

exit_form;

Modificati fereastra din forma F_EMP. Schimbati-i numele in WIN_EMP si titlul in "Informatii angajati". Verificati daca dimensiunea si pozitia sunt corespunzatoare. Salvati, compilati si executati forma pentru a testa modificarile.

Creati un nou bloc, numit BL_JOBS bazat pe tabelul JOBS_PNU (fara a crea relatii cu celelalte blocuri), pentru a fi afisat continutul acestuia pe un canvas diferit, de tip content, numit CV_JOB. Se vor afisa cate 4 linii si se va folosi un layout tabular, in care se va include si un scrollbar. Titlul frame-ului va fi "functii".

In forma F_EMP, creati o noua fereastra numita WIN_JOB. Dimensionati fereastra corespunzator. Titlul ferestrei va fi JOB, iar proprietatea "Hide on Exit" va fi setata Yes. Plasati noua fereastra intr-o pozitie potrivita relativ la WIN_EMP. Asociati ferestrei WIN_JOB canvas-ul CV_JOB.

In forma EMP, creati un canvas de tip toolbar orizontal, numit Toolbar, in fereastra WIN_EMP. (proprietatea Window)

Creati cele 3 butoane de mai jos in blocul de control si plasati-le pe canvas-ul Toolbar. Exit_button a fost creat anterior, este nevoie doar sa ii modificam proprietatile. Toate proprietatile, cu exceptia lui Label si a numelor butoanelor, pot fi setate simultan, printr-o selectie multipla.

Buton

Detalii

Job_button

Label: JOB;

Mouse Navigate: No;

Keyboard Navigable: No;

Canvas: Toolbar

Show_help_button

Label: Show Help;

Mouse Navigate: No;

Keyboard Navigable: No;

Canvas: Toolbar

Exit_button

Label: Exit;

Mouse Navigate: No;

Keyboard Navigable: No;

Canvas: Toolbar

Creati un canvas de tip stacked numit CV_HELP pentru a afisa help-ul in fereastra WIN_EMP a formei F_EMP. Dimensiunile vizibile recomandate sunt Viewport Width 270, Viewport Height 215 (pt). Adaugati un text corespunzator in acest canvas.

Pozitionati canvas-ul precedent in asa fel incat sa apara in centrul ferestrei WIN_EMP; organizati CV_HELP astfel incat sa fie ultimul canvas din secventa.

Comutati pe No proprietatea Visible a lui CV_HELP si apoi creati un buton in blocul de control pentru a ascunde informatia din Help atunci cand nu mai este necesara. Afisati acest buton pe CV_HELP. Butonul se va numi Hide_Help_Button (Label: Ascunde Help; Canvas: CV_HELP).

Modificati forma F_EMP pentru a folosi un canvas de tip tab, astfel: in Layout Editor, stergeti obiectul frame care acopera blocul corespunzator lui EMPLOYEES; creati canvas-ul de tip tab, in Layout Editor setati Background Color convenabil, iar in Property Palette setati Corner style = square, Bevel = none.

Redenumiti canvas-ul de tip tab TAB_EMP. Creati 4 pagini de tab si etichetati-le "Informatii", "Angajare", "Colectiv" si "Joburi". Numele vor fi Pag_Info, Pag_Angajati, Pag_Colectiv, Pag_Job.

Arangati paginile tab-ului (utilizand selectia multipla pentru item-uri), astfel incat:

employee_id, first_name, last_name, email, phone_number sa se afle in pagina "Informatii";

hire_date, job_id, salary, commission_pct sa se afle in pagina "Angajare";

manager_id si department_id se vor afla in pagina "Colectiv", iar in pagina "Joburi" se vor afisa elementele blocului JOBS.

In Layout Editor, repozitionati item-urile.

Creati un trigger When-Button-Pressed asupra lui Show_Help_Button, care foloseste procedura predefinita SHOW_VIEW pentru a afisa CV_HELP.

Indicatie:

WHEN-BUTTON-PRESSED la nivelul butonului Show_Help_Button

show_view('CV_HELP');

go_item('hide_help_button');

Creati un trigger When-Button-Pressed asupra lui Hide_Help_Button care ascunde CV_HELP. Pentru aceasta, folositi procedura predefinita HIDE_VIEW.

Indicatie:

WHEN-BUTTON-PRESSED la nivelul butonului Hide_Help_Button

hide_view( 'CV_HELP' );

go_block( 'bl_emp' );

Creati un trigger When-Button-Pressed asupra lui Job_Button care foloseste procedura predefinita GO_BLOCK pentru a afisa blocul corespunzator (BL_JOBS).

Indicatie:

WHEN-BUTTON-PRESSED la nivelul butonului Job_Button

go_block( 'bl_jobs' );

In fisierul F_DEP.fmb, creati o procedura numita list_of_values care are 2 parametri de tip VARCHAR2: primul parametru reprezinta numele obiectului LOV (ID_lov), iar al doilea parametru va furniza semnificatia unui element din lista de valori (ex: 'locatie'). Modificati trigger-ul When-Button-Pressed al lui ID_lov_button astfel incat sa apeleze aceasta procedura. Compilati si rulati forma in mod Debug. Stabiliti un breakpoint intr-unul din trigger-i si cercetati Call stack. Rulati pas cu pas.

Indicatie:

create or replace procedure list_of_values(obj_name in varchar2,

elem in varchar2)

is

v_bool boolean;

begin

v_bool := show_lov ( ' ID_lov ' );

if v_bool then

message( ' Ati selectat o ' || elem ) ;

else

message( ' Ati inchis lista de valori ' );

end if;

end;

Trigger-ul va avea forma : list_of_values( ' ID_lov ' , ' locatie ' ) ;

In forma F_DEP, scrieti un trigger care se declanseaza atunci cand se incearca modificarea codului managerului unui departament. Codul noului manager va trebui sa fie al unui angajat din departamentul respectiv.

Indicatie:

POST_CHANGE la nivelul item-ului manager_id

Declare

V_nr NUMBER;

begin

select count(*) into v_nr

from employees

where employee_id = :bl_dep.manager_id

and department_id = :bl_dep.department_id;

if v_nr = 0 then

message ( ' Managerul trebuie sa fie angajat al departamentului ' );

end if;

end;

Sa se introduca un nou camp in tabelul DEPARTMENTS_PNU, numit Imagine. Sa se introduca acest nou element pe plansa CV_DEP (din forma F_DEP) si sa se modifice valoarea prompt-ului sau in "Sigla".

In forma F_DEP, creati o plansa (canvas) de tip toolbar, numita CV_TOOL.

In blocul CONTROL al formei F_DEP, sa se creeze un buton nou, numit Image_Button, si sa se pozitioneze pe CV_TOOL. Setati proprietatea Label = Image Off.

Pe plansa CV_TOOL, se va pozitiona si un buton de iesire. Plasati si butonul id_lov_button pe CV_TOOL.

Indicatie:

Pe server a fost creat un obiect de tip Directory astfel (din contul SYS):

create or replace directory dir as 'd:img';

grant read on directory dir to public;

Pentru introducerea unei coloane in table, corespunzatoare unei imagini, se efectueaza comanda:

alter table departments_pnu

add (imagine bfile);

Pentru asocierea campului imagine cu imaginea stocata intr-un fisier din dir, se executa o comanda de tipul:

update departments_pnu

set imagine=bfilename('DIR', 'poza3.TIF')

where department_id = 10;

Sa se creeze un trigger care actioneaza cand este apasat butonul Image_Button. Trigger-ul va determina valoarea curenta a proprietatii visible a item-ului Imagine. Daca valoarea curenta este true, valoarea proprietatii visible devine false. Eticheta se va schimba pe Image_Button pentru a reflecta urmatoarea sa stare (daca item-ul Imagine este invizibil, eticheta butonului devine "Image On").

Indicatie:

WHEN_BUTTON_PRESSED la nivelul butonului Image_Button

if get_item_property ( 'bl_dep.imagine' , visible ) = 'TRUE'

then

set_item_property ( 'bl_dep.imagine' , visible, property_false );

set_item_property ( 'control.image_button' , label, 'Imagine On' );

else

set_item_property ( 'bl_dep.imagine' , visible, property_true );

set_item_property ( 'control.image_button' , label, 'Imagine Off' );

end if;

go_item('bl_dep.department_id'); --este nevoie de aceasta linie? De ce?

Creati o alerta (de tip Caution) numita manager_alert in F_DEP, cu un singur buton (OK). Mesajul sau va fi "Departamentul trebuie condus de un angajat al sau!".

Modificati trigger-ul creat la ex. 29 pentru a afisa manager_alert in loc de mesaj.

Indicatie:

POST_CHANGE la nivelul lui manager_id

declare

v_nr number;

alerta number;

begin

select count(*) into v_nr

from employees

where employees_id = :bl_dep.manager_id

and department_id = :bl_dep.department_id;

if v_nr = 0 then

alerta := show_alert ( 'manager_alert' ) ;

end if;

end;

Creati o alerta generica (de tipul Stop) in F_EMP, numita Question_Allert care accepta replicile Da si Nu.

Modificati trigger-ul When_Button_Pressed asupra lui CONTROL.Exit_Button, folosind Question_Alert pentru a cere utilizatorului sa confirme daca executia formei se termina.

Indicatie:

WHEN_BUTTON_PRESSED la nivelul butonului exit_button

set_alert_property( 'question_alert' , alert_message_text ,

'Doriti sa parasiti forma ?' );

if show_allert ( 'question_alert' ) = alert_button1

then exit_form;

end if;



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 918
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved