Jump to content
Sign in to follow this  
josemaria

macro para importar datos desde prodecimiento pl/sql

Recommended Posts

Hola;

he estado mirando en google, a ver si encontraba algo pero no he visto nada y no se como hacerlo.

tengo un excel que mensualmente tengo que rellenarlo con datos de un Package Body de oracle, son muchas consultas del estilo:

begin

bbdd.pack_cuadro_mandos.procedure ( '10', '2011', '03', 'CENTRO');

end;

cada numero corresponde a un campo distinto (mes, año, servicio, centro).

y cada una de esas consultas rellena un rango de celdas, por ejemplo (m4:m78), y cada consulta en una hoja distinta.

un total de 2 consultas por hoja, en 14 hojas distintas. eso mensualmente. y tengo que hacerlo en tres centros distintos mucho tiempo y consultas, pero bueno.

Ahora lo que hago es ejecutar la consulta con OraEdit o Toad, y el resultado lo copio en el excel, en su sitio correspondiente.

¿Habria alguna manera de poder realizar una macro para se pueda ejecutar en excel directamente y que se rellene automaticamente cogiendo los datos de la base de datos?

Un Saludo.

Jose Maria

Share this post


Link to post
Share on other sites

Hola;

sigo con mi tema aqui liado.

he ejecutado una macro para conectar con oracle desde datos--> Obtener datos externos--> Importar datos.

y se conecta perfectamente y la macro que me devuelve la grabadora es:

Sub Macro2()
'
' Macro2 Macro
' Macro grabada el 05/12/2011 por reserva
'

'
With ActiveSheet.QueryTables.Add(Connection:= _
"OLEDB;Provider=MSDAORA.1;Password=ayudaexcel;User ID=aydaexcel;Data Source=bbdd", _
Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("""bbdd"".""EMPLEADOS""")
.Name = "+Conectar con nuevo origen de datos"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = _
"C:\Documents and Settings\reserva.ATHENEA\Mis documentos\Mis archivos de origen de datos\EMPLEADOS.odc"
.Refresh BackgroundQuery:=False
End With
End Sub[/CODE]

Pero con eso solo puede coger tablas\vistas y traer todos los datos.

He visto muchas codigos en vba parecidos a este:

[CODE]Sub con()


Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strSQL As String

Set cnn = New ADODB.Connection
cnn.Provider = "msdaora"
cnn.Open "Data source=bbdd;User ID=ayudaexcel;Password=ayudaexcel;"

strSQL = "Select * From empleados"

Set rst = New ADODB.Recordset
rst.Open strSQL, cnn, adOpenDynamic, adLockReadOnly
If rst.EOF = False Then MsgBox rst.fields!postcode

rst.Close
Set rst = Nothing

cnn.Close
Set cnn = Nothing
End Sub[/CODE]

pero siempre me da error en la primera linea : " ADODB.Connection"

¿necesito algun complemento especial para utlilizar esta utilidad? para asi poner dentro de strSQL lo que yo quiera.

Un Saludo.

Jose Maria.[color=blue]

--- Mensaje unido automáticamente ---

[/color]Hola a todos;

acabo de ver la luz!, con este codigo:

[CODE]
Sub simpleVersion2()


Dim username As String
Dim password As String
Dim sid As String
Dim objSession As Object
Dim objdatabase As Object
Dim strSQL As String
Dim strResult As String
Dim OraDynaSet As Object
Dim i As Integer

username = "ayudaexcel"
password = "ayudaexcel"
sid = "bbdd"
' connect to database
Set objSession = CreateObject("OracleInProcServer.XOraSession")
Set objdatabase = objSession.OpenDatabase(sid, username & "/" & password, 0&)

'Add a new worksheet to your current workbook
Worksheets.Add
'select the employee name and number
strSQL = "select ID_EMPLEADO, NOMBRE from EMPLEADOS"

'Retrieve the results from Oracle
Set OraDynaSet = objdatabase.DBCreateDynaset(strSQL, 0&)

If OraDynaSet.RecordCount > 0 Then
'There were records retrieved

OraDynaSet.MoveFirst
'Loop the recordset for returned rows
For i = 1 To OraDynaSet.RecordCount
'Put the results in column A and B
ActiveSheet.Cells(i, 1) = OraDynaSet.Fields(0).Value
ActiveSheet.Cells(i, 2) = OraDynaSet.Fields(1).Value
OraDynaSet.MoveNext
Next i
End If

Set OraDynaSet = Nothing
Set objSession = Nothing
objdatabase.Close
Set objdatabase = Nothing
End Sub[/CODE]

Me ha rellenado los datos en las columnas A y B. A sido enorme ver los datos volcados en la hoja, jeje, y ademas se ha rellenado rapidisimo.

Sigo explorando a ver si puedo conseguir que se rellenen un un rango especifico.

Un Saludo.

Jose Maria.

Share this post


Link to post
Share on other sites

Hola José María:

En el adjunto encontrarás la forma mas sencilla que yo conozco de ejecutar una sentencia SQL y volcar la información a una hoja Excel en un rango específico.

Dentro del archivo, en el código, encontrarás las explicaciones de como conectar con la base de datos y realizar el resto del proceso.

Está probado con Access y MySql. (No dispongo de servidor Oracle).

Si necesitas alguna aclaración o realizar cualquier otra operación (Insertar, modificar, borrar, etc..) no dudes en preguntar.

Saludos

Tabla de base de datos SQL a Excel con ADO.xls

Share this post


Link to post
Share on other sites

Hola Macro Antonio;

Muchas gracias por el archivo, ya estoy haciendo mis pinitos con la conexion a oracle mediante consultas sencillas de tablas y vistas, otra cosa ya es hacer la llamada a un procedimiento pl/sql.

Nuevamente muchas gracias por todo.

Un SAludo.

Jose Maria.

P.D.: ya se puede cerrar este post, no se si debo de hacerlo yo, ni como.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...

Important Information

Privacy Policy