Baze de date
Relatii intre tabeleSelectarea 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) 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) MCURS=CODCURS **(INLOCUIESTE IN MEMORIE codcurs cu OPER) ENDIF NRCRT AT 5 ?? CODMOD AT 15 ?? MODUL AT 25 ?? DURATA PICT '99' AT 55 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 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 SKIP ENDDO WAIT WIND DEACTI WIND ALL CLOSE ALL CANCEL
|