Visual Basic para Aplicaciones - oracle, procedimiento almacenado y macro en excel

Life is soft - evento anual de software empresarial
 
Vista:

oracle, procedimiento almacenado y macro en excel

Publicado por Enrique (2 intervenciones) el 27/06/2016 15:55:27
Hola a todos, este es mi primer post.

He estado trabajando para poder obtener desde excel el resultado de un procedimiento almacenado. He seguido un tutorial que encontré en el que se define una tabla y el procedimiento almacenado en la WEB http://www.mkyong.com/oracle/oracle-stored-procedure-cursor-example/ y luego de ingresar unos cuantos registros a la tabla todo funciona bien incluso la ejecución del procedimiento almacenado.

Lo que no he podido encontrar es cómo ejecutar y recibir la información desde un macro de Excel, tal que pueda:
1. Conectar a la base de datos Oracle
2. Definir la consulta y los parámetros necesarios para enviar el query
3. Recibir los datos y ponerlos en una hoja de excel.

De lo que he encontrado lo más cerca que he estado de lograrlo es con este código (el que he visto más simple y a la vez me ha permitido llegar más lejos) pero recibo un error ya que, por lo que parece, estoy definiendo mal los parámetros. Espero que me puedan ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public Sub ConeccDB()
 
    Dim conn As ADODB.Connection
    Dim rst As ADODB.recordset
    Dim cmd As ADODB.Command
    Dim par1, par2 As ADODB.Parameter
 
 
    Set conn = New ADODB.Connection
 
    conn.Open "Driver={Microsoft ODBC for Oracle};" & _
    "Server=127.0.0.1;" & _
    "Uid=usuario;" & _
    "Pwd=pass"
 
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = conn
 
    cmd.CommandText = "getDBUSERCursor"
    cmd.CommandType = adCmdStoredProc
 
    'Aquí empiezo a confundirme ya que según entiendo el parámetro de entrada se define así
    Set par1 = cmd.CreateParameter("entrada", adVariant, adParamInput)
    par1.Value = "usuario"
    cmd.Parameters.Append par1
 
    'Y el parámetro de salida es del cual obtengo los resultados del cursor
    Set par2 = cmd.CreateParameter("salida", adIUnknown, adParamOutput)
    cmd.Parameters.Append par2
 
 
    Set rst = New ADODB.recordset
 
    'En esta línea obtengo el error: "Tipo de parámetro no compatible"
    Set rst = cmd.Execute
 
 
     'De aquí en adelante se supone que el resultado aparece a partir de la casilla A4
    Sheet1.Cells(4, 1).CopyFromRecordset rst
 
    Set cmd = Nothing
    Set par1 = Nothing
    Set par2 = Nothing
    rst.Close
    Set rst = Nothing
    conn.Close
    Set conn = Nothing
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

oracle, procedimiento almacenado y macro en excel

Publicado por Enrique (2 intervenciones) el 27/06/2016 20:43:17
He estado cambiando el código y logré un avance pequeño. Usando el procedimiento almacenado para eliminar un registro que tiene sólo un parámetro de entrada me corrió perfectamente, El código es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub inicio()
 
    Dim con As New ADODB.Connection
    Dim cmd As New ADODB.Command
 
    con.Provider = "msdaora"
    con.CursorLocation = adUseClient
    con.Open "PLSQLRSet=0;Data Source=127.0.0.1", "usuario", "password"
    Set cmd.ActiveConnection = con
 
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "deleteDBUSER"
    Set par1 = cmd.CreateParameter("entrada", adVariant, adParamInput)
    par1.Value = 1 'le asígné el valor de 1 porque ese era el que iba a borrar
    cmd.Parameters.Append par1
 
    cmd.Execute
    con.Close
 
End Sub

Me puse a cambiar líneas para cambiar el nombre del proceso almacenado y que me admitiera dos parámetros pero volví a quedar igual, un gran error al momento de llegar a la línea cmd.Execute. Pero estoy viendo que mi problema sí es el modo en el que defino los parámetros.

Por favor, llevo días queriendo solucionar esto, si alguien puede darme una mano quedaré muy agradecido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar