Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  Procedura stoca...
 Procedura stocata in Firebird care intoarce o tabela
 
 11/24/2008 9:20:06 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Procedura stocata in Firebird care intoarce o tabela
 (Romania)
Versiune Firebird : 2.1
Versiune VFP : 9

Am urmatorul scenariu : o tabela studenti ( cod numeric, nume caracter, prenume caracter,facultateId numeric) , o tabela materii (cod numeric , denumire caracter , profesor caracter )
si o procedura sp_note care primeste ca parametri de intrare idstudent (din tabela studenti) si anul (2000, 2001, ... ) si imi intoarce pentru acest student si anul dorit notele obtinute , materie cod , materie denumire (4 parametri de iesire : an, materieId, materieDenumire,nota )
un apel al procedurii ar arata asa : select an,materieId,materieDenumire,nota from sp_nota(:idstudent, :an) .
Ce vreau eu : un raport in care sa am fiecare student cu nume,prenume,facultateid (ce reprezinta un grup din raport) si ca detalii notele obtinute de student : an ,materieId,materieDenumire,nota
folosind neaparat aceasta procedura.
Problema mea este ca nu stiu cum sa obtin un cursor cu toate notele ,materiile obtinute de studentii unei facultati folosindu-ma de aceasta procedura .
Exemplu :
tabela studentii : cod nume prenume facultateid
1 ion ion 1
2 dan dan 1
3 radu radu 2
tabela materii : cod denumire profesor
1 mate radu
2 romana dan

Raportul as vrea sa arate cam asa (toti studentii de la facultatea cu id-ul 1):

1 dan dan
mate 10 2000
romana 8 2000
fizica 7 2001

2 ion ion
mate 5 2000
chimie 6 2001


Problema nu este raportul , ci cursorul (selectul ) care sa contina notele din spatele lui .Sper ca am fost clar , multumesc anticipat.




 11/24/2008 11:00:22 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Procedura stocata in Firebird care intoarce o tabela
 (N/A) Modified By Daniel Buduru  on 11/25/2008 12:01:31 AM)
Structuta tabelei materii este restrictiva:  rezulta ca o materie este predata de un singur profesor pe vecie ...
Si lipseste o tabela de note.
In loc de materii, ar fi mai potrivita o tabela de cursuri: idcurs, denumire, profesor. Astfel pot coexista mai multi profesori pe aceeasi materie simultan.
 Nu lucrez cu Firebird si nu am idee de particularitatile de implementare ale SQL, dar modelul urmator poate fi rulat in VFP9.

CREATE CURSOR studenti (cod_student int, nume c(15), prenume c(20), facultateid int)
INSERT INTO
studenti (cod_student, nume, prenume, facultateid) VALUES (1, 'ION', 'Ion',1)
INSERT INTO
studenti (cod_student, nume, prenume, facultateid) VALUES (2, 'DAN', 'Dan',1)
INSERT INTO
studenti (cod_student, nume, prenume, facultateid) VALUES (2, 'DAN', 'Dan',2)

CREATE CURSOR cursuri (idcurs int, denumire_curs c(20), profesor c(20))
INSERT INTO
cursuri (idcurs, denumire_curs, profesor) VALUES (1, 'Mate','Radu')
INSERT INTO
cursuri (idcurs, denumire_curs, profesor) VALUES (2, 'Romana','Vasile')

CREATE CURSOR note (idcurs int, cod_student int, an int, nota int)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (1, 1, 2001, 8)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (1, 1, 2002, 9)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (1, 2, 2001, 9)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (1, 2, 2002, 10)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (2, 3, 2001, 7)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (2, 3, 2002, 8)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (2, 1, 2001, 7)
INSERT INTO
note (idcurs, cod_student, an, nota) VALUES (2, 1, 2002, 8)

PRIVATE pcFacultateID
pcFacultateID=1

SELECT studenti.facultateid, studenti.cod_student, studenti.nume, studenti.prenume, ;
cursuri.denumire_curs, cursuri.profesor, note.an, note.nota ;

FROM
studenti LEFT JOIN note ON note.cod_student=studenti.cod_student ;

LEFT JOIN
cursuri ON cursuri.idcurs=note.idcurs ;

WHERE
studenti.facultateid=?pcFacultateID ;

ORDER BY
facultateid, studenti.cod_student, an, denumire_curs


Raportul se face cu grup pe cod_student.

Daniel Buduru
 11/25/2008 8:18:06 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Procedura stocata in Firebird care intoarce o tabela
 (N/A)
Multumesc pt. raspuns .
Mai sus am incercat cat de cat sa redau ideea , structura tabelelor este putin diferita .
Noaptea tot timpul este un sfetnic bun . Problema mea o voi rezolva cu ajutorul unei noi proceduri stocate realizata in Firebird .

 11/25/2008 8:47:49 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Procedura stocata in Firebird care intoarce o tabela
 (N/A)
 costin_mentor wrote

Problema nu este raportul , ci cursorul (selectul ) care sa contina notele din spatele lui .Sper ca am fost clar , multumesc anticipat.



Selectul este acelasi, indiferent daca este executat din VFP cu SQLEXEC, cursoradapter sau intr-o procedura stocata in firebird, mssql mysql, oracle ... Se ajusteaza doar sintaxa, dupa implementarea sql a respectivului server.

Daniel Buduru
  Visual FoxPro  Client/Server  Procedura stoca...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement