Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
Relatii intre tabele



Relatii intre tabele




Selectarea unei zone de lucru


1) comanda: SELECT <zona de lucru>

unde:

<zona de lucru>=1,2,3,4,5,6,7, ,32767

2) USE nume_tabel IN <zona de lucru>


ex.:

SELE 1

USE REG_CAT

DISP CODCURS,NUME,DATAN ALL

SELE 2

USE PLATI

DISP CODCURS,NRMAT,ACHITAT ALL

SELE 1

DISP CODCURS,NUME,DATAN ALL


PENTRU STABILIREA UNEI RELATII INTRE TABELE:

1) ACESTEA TREBUIESC INDEXATE SI DESCHISE DUPA ACEEASI CHEIE DE INDEXARE.

2) UNA DINTRE TABELE ESTE PARINTE SI CEALALTA COPIL

3) TREBUIE SA NE GASIM IN ZONA DE LUCRU IN CARE ESTE DESCHIS PARINTELE

4) VOM ANUNTA RELATIA INTRE TABELE CU COMANDA:

SET RELATION TO <expresia_cheii_de_indexare> INTO <nume_tabel_copil>


ex.: avem indexul comun: CHEIE1=CODCURS+STR(NRMAT)/5

SELE 1

USE PLATI ORDER CHEIE1

SELE 2

USE REG_CAT ORDER CHEIE1

*CHEIE1 POATE AVEA ALT NUME DAR ACELASI CONTINUT

SELE 1

SET RELATION TO CODCURS+STR(NRMAT)/5 INTO REG_CAT

DISP codcurs,nrmat,REG_CAT.NUME,achitat ALL

CLOSE ALL - inchide toate tabele indiferent de zona in care este deschisa



Cand dorim sa accesam un camp care se gaseste in alta zona de lucru  decat cea curenta: inaintea campului vom introduce numele tabelui urmat de un punct: TABEL.CAMP


Sa se scrie un program care sa consulte doua tabele: MODULE.DBF si CURSURI.DBF . Talebul MODULE este parinte. Module.dbf  indexat dupa codcurs si nr. Modulului cursuri.dbf indexat dupa codcurs.


modi comm cursmodul

CLEAR

CLOSE ALL


SELE 1

USE MODULE ORDER CODCURS

SELE 2

USE CURSURI ORDER CODCURS

SELE 1

SET RELATION TO CODCURS INTO CURSURI

******sau ** ** ** ** ***

**USE MODULE ORDER CODCURS

**USE CURSURI IN 2 ORDER CODCURS


GOTO TOP

DEFI WIND W FROM 1,1 TO 24,79 TITLE 'Continut module / cursuri'

ACTI WIND W

CLEAR

? 'CODUL CURSULUI: ', CODCURS

? REPL ('=',25)

? 'DENUMIRE CURS: ',CURSURI.DENUMIRE

**(afiseaza camp din alte zone)**

? 'NRCRT' AT 5

?? 'COD' AT 15

?? 'DENUMIRE MODUL' AT 25

?? 'DURATA' AT 55

? REPL ('=',60)

RAND

MCURS=CODCURS

** codcurs=ajut

DO WHILE NOT EOF()

IF CODCURS#MCURS

WAIT WIND 'terminat afisare curs'

CLEAR

? 'CODUL CURSULUI: ', CODCURS

? REPL ('=',25)

? 'DENUMIRE CURS: ',CURSURI.DENUMIRE

**(afiseaza camp din alte zone)**

? 'NRCRT' AT 5



?? 'COD' AT 15

?? 'DENUMIRE MODUL' AT 25

?? 'DURATA' AT 55

? REPL ('=',60)

RAND

MCURS=CODCURS

**(INLOCUIESTE IN MEMORIE codcurs cu OPER)

ENDIF


NRCRT AT 5

?? CODMOD AT 15

?? MODUL AT 25

?? DURATA PICT '99' AT 55

RAND=RAND+1

SKIP

ENDDO

WAIT WIND

DEACTI WIND ALL

CLOSE ALL

CANCEL



reg_cat plati


ajut 331 marian mihai                     ajut 331 marin mihai

ajut 331 marin mihai

ajut 332 stanca vasile



La legarea a 2 tabele:

1) la o inregistrare din parinte ii corespunde o inregistrare din copil

(one to one)


2) la o inregistrare din parinte ii corespunde mai multe

inregistrari din copil


one to main se transforma in one to one daca se declara invers:

copil-> parinte


PENTRU ACCESAREA TUTUROR INREGISTRARILOR din copil dupa comanda SET RELATION TO se da comanda: SET SKIP TO <nume_copil>


Sa se scrie un program  care sa afiseze pe ecran situatia incasarilor la cursuri utilizand informatiile care se gasesc in REG_CAT si PLATI. Din reg_cat vom lua nrmat. si numele iar din plati cat a achitat,nr. chitantei si data achitarii.


MODI COMM LISTPLATI

CLOSE ALL

SET CURRENCY TO 'LEI'

SET CURR RIGHT

USE REG_CAT ORDER CURSNRM

USE PLATI IN 2 ORDER CURSNRM

SET RELATION TO CODCURS+STR(NRMAT/5) INTO PLATI

SET SKIP TO PLATI

GOTO TOP

MCURS=CODCURS

?'INCASARILE LA CURSUL ',CODCURS

?REPL ('=',25)

?'NR.MAT ' AT 5

?'NUME SI PRENUME ' AT 25

?'INCASAT ' AT 43

?'NUMAR CHITANTA ' AT 60

?'DATA PLATII ' AT 75

TOTAL=0

RAND

DO WHILE NOT EOF()

IF MCURS#CODCURS

WAIT WIND 'TERMINAT AFISARE CURS'

CLEAR

?'INCASARILE LA CURSUL ',CODCURS

?REPL ('=',25)

?'NR.MAT ' AT 5

?'NUME SI PRENUME ' AT 25

?'INCASAT ' AT 43

?'NUMAR CHITANTA ' AT 60

?'DATA PLATII ' AT 75

ENDIF

? NRMAT AT 5

??NUME AT 25

??PLATI.ACHITAT PICT '9999999.99' FUNC '$' AT 43

??PLATI.NRCHITFACT

??PLATI.DATA

RAND=RAND+1

SKIP

ENDDO

WAIT WIND

DEACTI WIND ALL

CLOSE ALL

CANCEL




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright