Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Excel, Oracle et procedures stockées (PL/SQL)

1 réponse
Avatar
chag
Hello,

Je viens du site Excelabo.net (je vais leur faire de la pub vu combien
ce site m'a aidé a reprendre contact avec Excel :)) ) mais je n'ai pas
trouvé la reponse a mon probleme.

J'explique.

J'ai une feuille Excel qui lit/ecrit des données dans une base Oracle.
Je ne suis pas un grand pro de Excel et je ne connais pas grand chose a
Oracle (je sais quand meme faire les requetes de bases).

Le mec avec qui je travaille (ha, le travail a 2...) m'envoie une
procedure stockée que j'arrive tres bien a executer dans Toad (ou sql
plus, ou autres) avec cette commande :

Exec ma_proc_stock(param1);

Je l'execute en tant que script et ca marche. ce n'est pas du SQL. Donc,
si j'essaie de l'executer comme une requete habituelle, ca plante.

actuellement, je me connecte a la base Oracle de cette facon :

dim wrkODBC As DAO.Workspace
dim conPubs As DAO.Database

' Crée un objet Workspace ODBCDirect.
Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
"admin", "", dbUseODBC)

' Ouvre un objet Connection à l'aide des
' informations fournies
' dans la chaîne de connexion.
Set conPubs = wrkODBC.OpenDatabase("Connection1", _
dbDriverNoPrompt, False, _
"ODBC;DATABASE=" & db_dbname & _
";UID=" & db_login & _
";PWD=" & db_passwd & _
";DSN=" & db_dsn)

Et apres, je requete comme ca (si la requete doit retourner qqchose) :

Dim rstFourn as RecordSet
Set rstFourn = conPubs.OpenRecordset("SELECT * FROM table",
dbOpenForwardOnly)

ou comme ca (si la requete ne retourne rien) :

dim strsql as string
strsql = "INSERT INTO table(champs1) VALUES ('valeur1')"
conPubs.Execute strsql

Ma question est : comment je peux faire pour executer ma proc_stock ?
Visiblement, je ne peux pas passer par un RecordSet ni par execute

Pour info, j'utilise Excel 97 (contrainte client)

J'ai regarde dans les archives de google mais je n'ai rien trouve sur le
sujet sauf un message de 2001 pointant vers differents sites proposant
des produits payant.

Si quelqu'un peut m'aider, ca me depannerait bien :)

Chag

PS : retirez le blahblah de mon adresse mail si vous voulez me repodre
en privé :)

1 réponse

Avatar
chag
Hello,

Des fois que ca interresserait quelqu'un, voici un bout de code qui
semble fonctionner. Il faut utiliser ADODB a la place de DAO

Dim cnn1 As ADODB.Connection
Dim cmdExeproc As ADODB.Command

Dim Dsn As String
Dim Uid As String
Dim Pwd As String

Dim ProcName As String
Dim ProcParam As String

' Define the DSN
Dsn = "dsn"
' Define the Database login
Uid = "uid"
' Define the Database Password
Pwd = "pwd"

' Define the Stored procedure name
ProcName = "Proc"
' Define the value of the parameter (one parameter in this Proc)
ProcParam = "123"

' Open connection.
Set cnn1 = New ADODB.Connection
' Modify the following line to reflect a DSN within your environment
strCnn = "DSN=" & Dsn & "; " & _
"UID=" & Uid & "; " & _
"PWD=" & Pwd & ";"

cnn1.Open strCnn

Set cmdExeproc = New ADODB.Command

cmdExeproc.ActiveConnection = cnn1
cmdExeproc.CommandText = "{call " & ProcName & "(?)}"

' In the next set of code, we have to manually set
' the parameter types since ADO and ODBC cannot derive this
' information when calling packaged procedures.

cmdExeproc.Parameters(0).Direction = adParamInput
cmdExeproc.Parameters(0).Value = ProcParam

cmdExeproc.Execute
MsgBox ("Done")

' Close Connection
cnn1.Close

Chag

chag wrote:
Hello,

Je viens du site Excelabo.net (je vais leur faire de la pub vu combien
ce site m'a aidé a reprendre contact avec Excel :)) ) mais je n'ai pas
trouvé la reponse a mon probleme.

J'explique.

J'ai une feuille Excel qui lit/ecrit des données dans une base Oracle.
Je ne suis pas un grand pro de Excel et je ne connais pas grand chose a
Oracle (je sais quand meme faire les requetes de bases).

Le mec avec qui je travaille (ha, le travail a 2...) m'envoie une
procedure stockée que j'arrive tres bien a executer dans Toad (ou sql
plus, ou autres) avec cette commande :

Exec ma_proc_stock(param1);

Je l'execute en tant que script et ca marche. ce n'est pas du SQL. Donc,
si j'essaie de l'executer comme une requete habituelle, ca plante.

actuellement, je me connecte a la base Oracle de cette facon :

dim wrkODBC As DAO.Workspace
dim conPubs As DAO.Database

' Crée un objet Workspace ODBCDirect.
Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
"admin", "", dbUseODBC)

' Ouvre un objet Connection à l'aide des
' informations fournies
' dans la chaîne de connexion.
Set conPubs = wrkODBC.OpenDatabase("Connection1", _
dbDriverNoPrompt, False, _
"ODBC;DATABASE=" & db_dbname & _
";UID=" & db_login & _
";PWD=" & db_passwd & _
";DSN=" & db_dsn)

Et apres, je requete comme ca (si la requete doit retourner qqchose) :

Dim rstFourn as RecordSet
Set rstFourn = conPubs.OpenRecordset("SELECT * FROM table",
dbOpenForwardOnly)

ou comme ca (si la requete ne retourne rien) :

dim strsql as string
strsql = "INSERT INTO table(champs1) VALUES ('valeur1')"
conPubs.Execute strsql

Ma question est : comment je peux faire pour executer ma proc_stock ?
Visiblement, je ne peux pas passer par un RecordSet ni par execute

Pour info, j'utilise Excel 97 (contrainte client)

J'ai regarde dans les archives de google mais je n'ai rien trouve sur le
sujet sauf un message de 2001 pointant vers differents sites proposant
des produits payant.

Si quelqu'un peut m'aider, ca me depannerait bien :)

Chag

PS : retirez le blahblah de mon adresse mail si vous voulez me repodre
en privé :)