SQL en excel

30/10/2005 - 16:41 por lroldan | Informe spam
Hola a todos..
He logrado hacer la conexión a un dbf desde excel (VBA) y la consulta que
necesito, pero quisiera que el resultado de esta consulta se ubique en una
hoja específica (y celda o rango).

Se que construyendo una tabla dinámica llegaría a los mismos resultados,
pero también creo que con consultas directas sql (no tabla dina) funcionaría
más rápido..es correcto esto?

gracias por la ayuda
Luis

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
31/10/2005 - 04:25 | Informe spam
hola, Luis !

... la conexion a un dbf desde excel (VBA) y la consulta que necesito
... quisiera que el resultado... se ubique en una hoja especifica (y celda o rango)



probablemente [solo] sea necesario indicar en el codigo la [nueva] ubicacion que necesitas -?-
si comentas -al menos- la parte del codigo donde se hace la 'devolucion' de la consulta -?-

Se que construyendo una tabla dinamica llegaria a los mismos resultados
pero tambien creo que con consultas directas sql (no tabla dina) funcionaria mas rapido. es correcto esto?



[me parece que] 'esta parte' de tu consulta tiene, como -casi- todo, pros y contras -?-
dependiento de lo que necesites interpretar como 'rapidez' [refrescar consultas, modificar parametros, cambiar ubicaciones, etc.]
podrias hacer pruebas por medio del menu de datos / obtener datos externos [es bastante 'amigable'] ;)

te paso algo de info al respecto al final del presente ;)
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

=
una vez que 'termines' con el asistente para 'finalizar' la consulta a la base de datos... si deseas agregar parametros 'variables'...
1) puedes 'consultar/modificar/...' la 'sentencia' de la consulta [sql] desde el mismo menu de datos [o la BH de datos externos]
-> solicita modificar la consulta
-> 'avanza' hasta el ultimo paso [finalizar]
-> en lugar de 'devolver' los datos a excel... selecciona ->ver datos o modificar consulta en MS Query<-
-> elige: [menu] ver / sql... [o de la BH el icono de SQL]
2) una vez que decidas que partes de la consulta deseas 'convertir' en parametros...
-> sustituye la/s fraccion/es 'apropiada/s' de la sentencia por un signo ? [opcionalmente pudes darles un 'identificador' CORTO]
[lo anterior ocasiona que ANTES de 'refrescar' una consulta, MS-Query 'te pregunta' por el -nuevo- valor del parametro]
-> termina la modificacion y 'devueve' los datos a excel [tendras que 'responder' una cuantas preguntas a los parametros] :))
3) posteriormente, puedes sustituir la/s 'pregunta/s' de MS-Query por los valores que pueda 'tomar' de celdas en tu hoja...
-> vuelve a ejecutar [menu] datos / obtener datos externos / parametros... [o desde la BH de datos externos]
-> selecciona [por cada parametro] la opcion de: 'tomar el valor de la siguiente celda:'
-> y [obviamente] selecciona la celda 'apropiada' para cada parametro
4) segun la parte de la sentencia sql que hayas 'parametrizado'... debera haber una celda son la 'sintaxis' EXACTA del parametro -?-

si deseas consultar sitios con informacion al respecto... visita:
-> Andy Wiggins: http://www.bygsoftware.com/Excel/sql.htm
-> Ole P. Erlandsen: http://www.erlandsendata.no/english...connstring
-> Carl Prothman: http://www.carlprothman.net/Default.aspx?tabid‡#OLEDBProviderForSQLServer
-> Dick Kusleika: http://www.dicks-clicks.com/excel/E...m#CreateUI
Respuesta Responder a este mensaje
#2 lroldan
31/10/2005 - 05:51 | Informe spam
Hola Héctor Miguel.
No sabía eso de los parámetros, muy buen dato, mañana mismo lo probaré.
Te comento el motivo de mi consulta.

Tengo varias hojas, cada una con una tabla dinámica, cada TD consulta a un
dbf. Las filas y columnas de cada TD son las mismas en cada hoja. En otra
hoja hago el consolidado de las TD a través de fórmulas. La difcultas es que
las TD demorán mucho en actualizar por lo que lo hice con cubos olap de
excel, lo que me dió buenos resultados. Ahora bien, revisando algunas cosas,
logré hacer la conexión a los dbf a través de códigos en vba y tengo la
consulta que quiero de la base, pero ese resultado quiero ubicarlo en una
hoja determinada..como puedo hacer eso??. espero me haya explicado..

saludos
Luis



"Héctor Miguel" escribió:

hola, Luis !

> ... la conexion a un dbf desde excel (VBA) y la consulta que necesito
> ... quisiera que el resultado... se ubique en una hoja especifica (y celda o rango)

probablemente [solo] sea necesario indicar en el codigo la [nueva] ubicacion que necesitas -?-
si comentas -al menos- la parte del codigo donde se hace la 'devolucion' de la consulta -?-

> Se que construyendo una tabla dinamica llegaria a los mismos resultados
> pero tambien creo que con consultas directas sql (no tabla dina) funcionaria mas rapido. es correcto esto?

[me parece que] 'esta parte' de tu consulta tiene, como -casi- todo, pros y contras -?-
dependiento de lo que necesites interpretar como 'rapidez' [refrescar consultas, modificar parametros, cambiar ubicaciones, etc.]
podrias hacer pruebas por medio del menu de datos / obtener datos externos [es bastante 'amigable'] ;)

te paso algo de info al respecto al final del presente ;)
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

=>
una vez que 'termines' con el asistente para 'finalizar' la consulta a la base de datos... si deseas agregar parametros 'variables'...
1) puedes 'consultar/modificar/...' la 'sentencia' de la consulta [sql] desde el mismo menu de datos [o la BH de datos externos]
-> solicita modificar la consulta
-> 'avanza' hasta el ultimo paso [finalizar]
-> en lugar de 'devolver' los datos a excel... selecciona ->ver datos o modificar consulta en MS Query<-
-> elige: [menu] ver / sql... [o de la BH el icono de SQL]
2) una vez que decidas que partes de la consulta deseas 'convertir' en parametros...
-> sustituye la/s fraccion/es 'apropiada/s' de la sentencia por un signo ? [opcionalmente pudes darles un 'identificador' CORTO]
[lo anterior ocasiona que ANTES de 'refrescar' una consulta, MS-Query 'te pregunta' por el -nuevo- valor del parametro]
-> termina la modificacion y 'devueve' los datos a excel [tendras que 'responder' una cuantas preguntas a los parametros] :))
3) posteriormente, puedes sustituir la/s 'pregunta/s' de MS-Query por los valores que pueda 'tomar' de celdas en tu hoja...
-> vuelve a ejecutar [menu] datos / obtener datos externos / parametros... [o desde la BH de datos externos]
-> selecciona [por cada parametro] la opcion de: 'tomar el valor de la siguiente celda:'
-> y [obviamente] selecciona la celda 'apropiada' para cada parametro
4) segun la parte de la sentencia sql que hayas 'parametrizado'... debera haber una celda son la 'sintaxis' EXACTA del parametro -?-

si deseas consultar sitios con informacion al respecto... visita:
-> Andy Wiggins: http://www.bygsoftware.com/Excel/sql.htm
-> Ole P. Erlandsen: http://www.erlandsendata.no/english...connstring
-> Carl Prothman: http://www.carlprothman.net/Default.aspx?tabid‡#OLEDBProviderForSQLServer
-> Dick Kusleika: http://www.dicks-clicks.com/excel/E...m#CreateUI



Respuesta Responder a este mensaje
#3 Héctor Miguel
31/10/2005 - 06:57 | Informe spam
hola, Luis !

... los parametros... buen dato... lo probare.
... revisando algunas cosas, logre hacer la conexion a los dbf... en vba
... ese resultado quiero ubicarlo en una hoja determinada..como puedo hacer eso?



'te regreso' a la primera parte de la respuesta anterior :)) ...

> ... la conexion a un dbf desde excel (VBA) y la consulta que necesito
> ... quisiera que el resultado... se ubique en una hoja especifica (y celda o rango)

probablemente [solo] sea necesario indicar en el codigo la [nueva] ubicacion que necesitas -?-
si comentas -al menos- la parte del codigo donde se hace la 'devolucion' de la consulta -?-





si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 lroldan
31/10/2005 - 14:33 | Informe spam
Hola Hector Miguel. Te adjunto el código y te voy explicando.

Este es de la conexión a mi base de datos:

Public Function runsql(ByVal strsql As String) As Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Open strsql, cn
Set runsql = rs
Set rs = Nothing
End Function

Public Function conecta() As Boolean
On Error GoTo noconecta
xcnt = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Extended Properties=dBASE IV;"
& _
"Data Source=c:\Base"
cn.Open xcnt
conecta = True
Exit Function
noconecta:
conecta = False
MsgBox "No se realizó la conexion"
End Function

Sub main()
If conecta = True Then
Form1.Show
Else
MsgBox "error de conexión", vbExclamation, "Error"
End If
End Sub

Luego carga el formulario Form1 el cual contiene 1 datagrid y 1 botón de
comando. el resultado del comando se muestra en el datagrid. El código del
botón es:

Private Sub CommandButton1_Click()
Set DG1.DataSource = runsql("select * from baseira")
End Sub

Lo que quisiera es que en lugar de salir los resultados en el datagrid,
salgan en una hoja determinada..como lo puedo hacer??

gracias
Luis







"Héctor Miguel" escribió:

hola, Luis !

> ... los parametros... buen dato... lo probare.
> ... revisando algunas cosas, logre hacer la conexion a los dbf... en vba
> ... ese resultado quiero ubicarlo en una hoja determinada..como puedo hacer eso?

'te regreso' a la primera parte de la respuesta anterior :)) ...

>> > ... la conexion a un dbf desde excel (VBA) y la consulta que necesito
>> > ... quisiera que el resultado... se ubique en una hoja especifica (y celda o rango)
>>
>> probablemente [solo] sea necesario indicar en el codigo la [nueva] ubicacion que necesitas -?-
>> si comentas -al menos- la parte del codigo donde se hace la 'devolucion' de la consulta -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
01/11/2005 - 03:38 | Informe spam
hola. Luis !

... adjunto el codigo [...]
Luego carga el formulario Form1... 1 datagrid y 1 boton... muestra en el datagrid [...]
... que en lugar de salir los resultados en el datagrid, salgan en una hoja determinada [...]



por los codigos que adjuntas [supongo que] declaras variables a nivel de modulo y las utilizas en procedimientos -?-
no se que tipo de errores 'esperas' encontrar [por el manejo de errores]
ni comentas si el tipo de recoreset es DAO... o ADO -?- [la sugerencia es preferentemente ADO] ;)
prueba con lineas como las siguientes ['vaciando' el recodset con la funcion CopyFromRecordSet ->excel 2000 en adelante<-]

si cualquier duda... comentas ?
saludos,
hector.
en un modulo de codigo 'normal' ==' establecer PRIMERO una referencia en el proyecto de macros a la biblioteca de objetos: _
Microsoft ActiveX Data Objects x.x' [donde x.x es el numero de version de la biblioteca] <= OJO
Sub ImportarDatos()
Dim Archivo As String, Tabla As String, Hoja As String, Rango As String, _
Conexion As ADODB.Connection, Registros As ADODB.Recordset
Archivo = "C:\Base"
Tabla = "baseira"
Hoja = "Hoja2"
Rango = "b2"
Set Conexion = New ADODB.Connection
Conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase IV;Data Source=" & Archivo & ";"
Set Registros = New ADODB.Recordset
Registros.Open Tabla, Conexion, adOpenStatic, adLockOptimistic, adCmdTable
Worksheets(Hoja).Range(Rango).CopyFromRecordset Registros
Registros.Close: Set Registros = Nothing
Conexion.Close: Set Conexion = Nothing
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida