
Creo un DSN de sistema por código para conectarme a una base de datos MySQL que está en otro pc.
Código:
y luego hago la conexiónSub crearDSN() Dim dl As Long ' Valor devuelto por la función API Dim sAttributes As String ' Aributos Dim sDriver As String ' Nombre del controlador Dim sDescription As String ' Descripción del DSN Dim sDsnName As String ' Nombre del DSN On Error GoTo errorDSN ' Establecemos los atributos necesarios sDsnName = "HDPU" sDescription = "DSN de sistema para MySQL y HDPU" sDriver = "MySQL ODBC 3.51 Driver" ' Los pares de cadenas acabarán en valor Null sAttributes = "DSN=" & sDsnName & Chr(0) sAttributes = sAttributes & "Server=" & strNombreServidor & Chr$(0) sAttributes = sAttributes & "User=" & strUsuario & Chr$(0) sAttributes = sAttributes & "Password=" & strPassword & Chr$(0) sAttributes = sAttributes & "Description=" & sDescription & Chr(0) sAttributes = sAttributes & "Database=" & nombreBDInformacion & Chr(0) ' Si deseamos utilizar la autenticación de Windows NT, deberemos de ' especificarlo en la cadena de atributos sAttributes = sAttributes & "Trusted_Connection=True" & Chr(0) ' Creamos el nuevo origen de datos de usuario especificado. ' Si deseamos que aparezca el cuadro de diálogo, tendremos que ' especificar la propiedad «hWnd» del formulario donde se realiza ' la llamada a la función API. dl = SQLConfigDataSource(vbAPINull, ODBC_ADD_SYS_DSN, sDriver, sAttributes) If not dl Then MsgBox "Ha ocurrido un error mientras se creaba el DSN de Sistema para MySQL. Posiblemente necesite tener permisos de Aministrador en su máquina." & vbCrLf & "Consulte con el Aministrador de su equipo", vbCritical, "Error" End End If Exit Sub 'ERROR errorDSN: MsgBox "Ha ocurrido un error mientras se creaba el DSN de Sistema para MySQL. Posiblemente necesite tener permisos de Aministrador en su máquina." & vbCrLf & "Consulte con el Aministrador de su equipo", vbCritical, "Error" End End Sub
Código:
esto funciona oConexionInformacion.CursorLocation = adUseClient oConexionInformacion.Open "DSN=HDPU"

El problema es cuando quiero cambiar de base de datos, ya que según a mi entender, lo único que hay que hacer sería cerrar la conexión, modificar el DSN y volver a abrir la conexión, pero no funciona como debería por algún problema de refresco.
Haciendo debug con F8, veo como modifica el DSN con los atributos nuevos (otra base de datos) y lo crea bien porque lo compruebo entrando en panel de control.... etc
Código:
pero cuando vuelvo a abrir la conexiónSub modificarDSN() Dim dl As Long ' Valor devuelto por la función API Dim sAttributes As String ' Aributos Dim sDriver As String ' Nombre del controlador Dim sDsnName As String ' Nombre del DSN Const ODBC_CONFIG_SYS_DSN As Long = 5 ' Se modificará un DSN de sistema ' Establecemos los atributos necesarios sDsnName = "HDPU" sDriver = "MySQL ODBC 3.51 Driver" ' Los pares de cadenas acabarán en valor Null sAttributes = "DSN=" & sDsnName & Chr(0) sAttributes = sAttributes & "Server=" & strNombreServidor & Chr$(0) sAttributes = sAttributes & "User=" & strUsuario & Chr$(0) sAttributes = sAttributes & "Password=" & strPassword & Chr$(0) sAttributes = sAttributes & "Database=" & nombreBDInformacion & Chr(0) ' Modificamos el origen de datos de usuario especificado dl = SQLConfigDataSource(0&, ODBC_CONFIG_SYS_DSN, sDriver, sAttributes) If not dl Then MsgBox "Ha ocurrido un error mientras se creaba el DSN de Sistema para MySQL. Posiblemente necesite tener permisos de Aministrador en su máquina." & vbCrLf & "Consulte con el Aministrador de su equipo", vbCritical, "Error" End End If End Sub
Código:
sigue manteniedo alguna referencia antigua al DSN porque no actualiza los atributos que he modificado.If oConexionInformacion.State = adStateOpen Then oConexionInformacion.Close End If oConexionInformacion.CursorLocation = adUseClient oConexionInformacion.Open "DSN=HDPU"
¿Le ha pasado esto a alguien?
salu2 y gracias