UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

jose maria aguilar


Hola, estoy conectando con una base de datos Mysql a través de vba, y generando una tabla dinámica. Tengo una variable que denomino SQL de tipo String la cual voy cambiando para cambiar las consultas que voy haciendo, en este caso con SELECT.
Pues bien, al llegar el programa al punto donde tengo .CommandText = SQL, me cambia el nombre de la conexión que tenía definido en la tabla dinámica y me lo renombra como (Conexión1) , lo que me deja sin la conexión que tenía a la BBDD.

Cuando repito este mismo proceso con tablas que NO son dinámicas, no sucede esto y funciona todo perfectamente, cambiando las SELECT y generando tablas sin ningún problema.

No puedo poner un archivo de ejemplo ya que están vinculados a las bases de datos. Incorporo el código que estoy usando:

Sub actualiza_datos(NOMBRE_CONEXION, SQL, NOMBRE_BASE_DE_DATOS As String)
With ActiveWorkbook.Connections(NOMBRE_CONEXION).ODBCConnection
.BackgroundQuery = False
.CommandText = SQL
.CommandType = xlCmdSql
.Connection = "ODBC;DSN=" & NOMBRE_BASE_DE_DATOS & ";"
.CommandText = SQL
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
ActiveWorkbook.Connections(NOMBRE_CONEXION).Refresh
End Sub

Gracias.

jose maria aguilar


Hola, creo que he encontrado una solución que además sirve para todas las tablas dinámicas que pongamos en el libro con conexiones a datos, llevo un par de horas probando y no me ha vuelto a dar errores, dejo el código por si a alguien le puede ser de utilidad.

Sub actualiza_datos_TD(NOMBRE_CONEXION, SQL, NOMBRE_BASE_DE_DATOS, NOMBRE_TABLA_DINAMICA As String)

Dim NOMBRE_CONEXION_CAMBIADO As String

With ActiveWorkbook.Connections(NOMBRE_CONEXION).ODBCConnection
.BackgroundQuery = False
.Connection = "ODBC;DSN=" & NOMBRE_BASE_DE_DATOS & ";"
.CommandText = SQL
.CommandType = xlCmdSql
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.Refresh
End With

NOMBRE_CONEXION_CAMBIADO = ActiveSheet.PivotTables(NOMBRE_TABLA_DINAMICA).PivotCache.WorkbookConnection

If (StrComp(NOMBRE_CONEXION_CAMBIADO, NOMBRE_CONEXION) <> 0) Then
ActiveWorkbook.Connections(NOMBRE_CONEXION).Delete
ActiveWorkbook.Connections(NOMBRE_CONEXION_CAMBIADO).name = NOMBRE_CONEXION
End If

End Sub

Un saludo a todos y gracias.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.