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

#6 lroldan
01/11/2005 - 17:16 | Informe spam
Hola Héctor y gracias por toda la ayuda ;) pero quisera una cosa más..
funciona el código que me pasaste, pero este recupera la base y yo quiero
una detemrinada consulta (por ejm select sexo, count(sexo) from baseira group
by sexo)...

Luis




"Héctor Miguel" escribió:

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
#7 Héctor Miguel
02/11/2005 - 01:57 | Informe spam
hola, Luis !

... el codigo... recupera la base y yo quiero una detemrinada consulta (... select sexo, count(sexo) from baseira group by sexo)...



1) como te comentaba en el mensaje anterior [al parecer] solo expusiste una parte del codigo que utilizas -?-...
por los codigos que adjuntas [supongo que] declaras variables a nivel de modulo y las utilizas en procedimientos -?-





2) en tu primer mensaje comentabas que ya obtenias una 'consulta' [supongo esta especifica de ahora]...
-> podrias exponer 'esa' [especifica] parte del codigo en donde construyes o armas la consulta ?
[para conocer los parametros +/- 'exactos' que estas utilizando] :))

3) [probablemente] habria que agregar 'definiciones' a las consultas [al abrir los recordsets]
o... hacer pruebas desde el menu de datos / obtener datos externos... [utilizando consultas 'parametrizadas'] -?-
[o quizas combinar ambas funcionalidades -macros y menus-] -?-

4) la otra alternativa es [volver a] visitar las paginas recomendadas anteriormente...
-> 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

comentas por donde 'le damos' ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 lroldan
02/11/2005 - 15:40 | Informe spam
Hola Héctor.
Si, declaro hago una declaración de variables..me faltó poner el código en
el mensaje anterior
Global cn As New ADODB.Connection
Global rs As New ADODB.Recordset

lo demás es igual.

la consulta esta en un boton de comandos, una de ella es

Private Sub CommandButton2_Click()
Set DG1.DataSource = runsql("Transform count(nombres) As Casos Select
DIAGNOSTIC from c:\base\base2005.dbf group by diagnostic pivot tipo_dx")
End Sub

gracias por la ayuda q me sigues dando

Luis





"Héctor Miguel" escribió:

hola, Luis !

> ... el codigo... recupera la base y yo quiero una detemrinada consulta (... select sexo, count(sexo) from baseira group by sexo)...

1) como te comentaba en el mensaje anterior [al parecer] solo expusiste una parte del codigo que utilizas -?-...
>> por los codigos que adjuntas [supongo que] declaras variables a nivel de modulo y las utilizas en procedimientos -?-

2) en tu primer mensaje comentabas que ya obtenias una 'consulta' [supongo esta especifica de ahora]...
-> podrias exponer 'esa' [especifica] parte del codigo en donde construyes o armas la consulta ?
[para conocer los parametros +/- 'exactos' que estas utilizando] :))

3) [probablemente] habria que agregar 'definiciones' a las consultas [al abrir los recordsets]
o... hacer pruebas desde el menu de datos / obtener datos externos... [utilizando consultas 'parametrizadas'] -?-
[o quizas combinar ambas funcionalidades -macros y menus-] -?-

4) la otra alternativa es [volver a] visitar las paginas recomendadas anteriormente...
-> 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

comentas por donde 'le damos' ?
saludos,
hector.



Respuesta Responder a este mensaje
#9 Héctor Miguel
03/11/2005 - 01:42 | Informe spam
hola, Luis !

... hago una declaracion de variables ...
Global cn As New ADODB.Connection
Global rs As New ADODB.Recordset
lo demas es igual... la consulta esta en un boton de comandos, una de ella es
Private Sub CommandButton2_Click()
Set DG1.DataSource = runsql("Transform count(nombres) As Casos Select
DIAGNOSTIC from c:\base\base2005.dbf group by diagnostic pivot tipo_dx")
End Sub



[quizas estoy tratando de 'cambiarte' el panorama u ocasionandote otro tipo de 'conflictos'] -?-
[tratando de hacer una especie de]... en resumen...
-> si ya estas usando funciones y asignando valores/resultados a variables de tipo 'RecordSet'...
[creo que] lo unico que necesitas es 'pasar' esos recordsets a x_rango en x_hoja -?-
lo cual puedes instruir en el codigo con sentencias del tipo como en el ejemplo anterior...
-> Worksheets("Aqui la hoja").Range("aqui el rango").CopyFromRecordset <aqui tu variable de tipo RecordSet>

comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#10 lroldan
03/11/2005 - 15:01 | Informe spam
Gracias Héctor, ese comando fue el que necesitaba ... lo ejecuté y todo
funciona bien...gracias nuevamente

Luis



"Héctor Miguel" escribió:

hola, Luis !

> ... hago una declaracion de variables ...
> Global cn As New ADODB.Connection
> Global rs As New ADODB.Recordset
> lo demas es igual... la consulta esta en un boton de comandos, una de ella es
> Private Sub CommandButton2_Click()
> Set DG1.DataSource = runsql("Transform count(nombres) As Casos Select
> DIAGNOSTIC from c:\base\base2005.dbf group by diagnostic pivot tipo_dx")
> End Sub

[quizas estoy tratando de 'cambiarte' el panorama u ocasionandote otro tipo de 'conflictos'] -?-
[tratando de hacer una especie de]... en resumen...
-> si ya estas usando funciones y asignando valores/resultados a variables de tipo 'RecordSet'...
[creo que] lo unico que necesitas es 'pasar' esos recordsets a x_rango en x_hoja -?-
lo cual puedes instruir en el codigo con sentencias del tipo como en el ejemplo anterior...
-> Worksheets("Aqui la hoja").Range("aqui el rango").CopyFromRecordset <aqui tu variable de tipo RecordSet>

comentas?
saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida