swasik
Messages postés4Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention17 mars 2003
-
19 juin 2002 à 16:14
merzoukb
Messages postés2Date d'inscriptionmercredi 27 février 2008StatutMembreDernière intervention28 février 2008
-
28 févr. 2008 à 11:41
Bonjour à tous,
bon j'essaie de me depatouiller avec une procedure stockee sous oracle appellee a partir de VB6.
Je veux recuperer des donnees dans un recordset à travers un curseur
en recherchant dans les messages du forum et sur le net j'arrive au code suivant :
le package ou est declare le curseur :
PACKAGE cv_types AS
TYPE c_livre is REF CURSOR;
END cv_types;
Le code de la procedure stockee :
PROCEDURE select_livre(c_livre out cv_types.c_livre)
IS
BEGIN
OPEN c_livre FOR
SELECT * FROM t_bib_livre;
END select_livre;
le code que j'ai utilise dans VB :
Dim adocmd As ADODB.Command
Dim rst_livre As ADODB.Recordset
Set adocmd = New ADODB.Command
Set rst_livre = New ADODB.Recordset
adocmd.CommandText = "{call select_livre()}"
adocmd.CommandType = adCmdStoredProc
adocmd.ActiveConnection= "dsn=BibOracle;UID=ORACLE;PWD=ORACLE"
Set rst_livre = adocmd.Execute
End Sub
Il semblerait ??? que cela bloque sur le parametre de type ref cursor mais dans la doc sur le site oracle, il est precise si j'ai bien compris qu'il n'y a pas besoin de passer les parm de type ref cursor
voila le message d'erreur que j'obtiens :
[Microsoft][ODBC Driver for Oracle][Oracle]ORA-20004
Auriez vous une piste pour m'aider?
D'avance merci
Sabinedqs
merzoukb
Messages postés2Date d'inscriptionmercredi 27 février 2008StatutMembreDernière intervention28 février 2008 28 févr. 2008 à 11:40
Bonjour,
J'étais confronté au même problème, je peux vous apporter quelques eclairsissement au sujet de votre question.
1. Avant tout il faut rajouter dans le menu "Outils>Réferences" l'ADO choisir "Microsoft ActiveX Data Objects 2.x Library"
2. Pour la connection je te mets un exemple (Lien ODBC existe déja) :
Dim conn As ADODB.Connection
conn.ConnectionString = _
"Driver={Microsoft ODBC for Oracle};" & _
"SERVER=servername;UID=user_name;PWD=mot_de_passe"
conn.Open
' Pour tester la connction
If conn.State = adStateOpen Then
MsgBox "Connection effectuée."
End If
'fermer la connection
conn.Close
Set conn = Nothing
2. Pour la procédure stockée :
Je vois que ta créer un package, c'est exactement ce qu'il faut sauf que c'est pas complet, voir ci-dessous
CREATE OR REPLACE PACKAGE cv_types AS
TYPE t_livre is REF CURSOR;
PROCEDURE select_livre(io_livre out t_livre)
END cv_types;
/
CREATE OR REPLACE PACKAGE BODY cv_types AS
PROCEDURE select_livre(io_livre out t_livre)
v_livre t_livre;
IS
BEGIN
OPEN v_livre FOR SELECT * FROM t_bib_livre;
END select_livre;
END cv_types ;
/
3. Pour l'utilisation du cursur dans VBA je te laisse le soin, car moi aussi je pas encore fini de le faire.
merzoukb
Messages postés2Date d'inscriptionmercredi 27 février 2008StatutMembreDernière intervention28 février 2008 28 févr. 2008 à 11:41
Bonjour,
J'étais confronté au même problème, je peux vous apporter quelques eclairsissement au sujet de votre question.
1. Avant tout il faut rajouter dans le menu "Outils>Réferences" l'ADO choisir "Microsoft ActiveX Data Objects 2.x Library"
2. Pour la connection je te mets un exemple (Lien ODBC existe déja) :
Dim conn As ADODB.Connection
conn.ConnectionString = _
"Driver={Microsoft ODBC for Oracle};" & _
"SERVER=servername;UID=user_name;PWD=mot_de_passe"
conn.Open
' Pour tester la connction
If conn.State = adStateOpen Then
MsgBox "Connection effectuée."
End If
'fermer la connection
conn.Close
Set conn = Nothing
2. Pour la procédure stockée :
Je vois que ta créer un package, c'est exactement ce qu'il faut sauf que c'est pas complet, voir ci-dessous
CREATE OR REPLACE PACKAGE cv_types AS
TYPE t_livre is REF CURSOR;
PROCEDURE select_livre(io_livre out t_livre)
END cv_types;
/
CREATE OR REPLACE PACKAGE BODY cv_types AS
PROCEDURE select_livre(io_livre out t_livre)
v_livre t_livre;
IS
BEGIN
OPEN v_livre FOR SELECT * FROM t_bib_livre;
io_livre:=v_livre ;
END select_livre;
END cv_types ;
/
3. Pour l'utilisation du cursur dans VBA je te laisse le soin, car moi aussi je pas encore fini de le faire.