Sie sind auf Seite 1von 3

Const DB_CONNECT as String = “Driver=(MySQL ODBC 5.

1
Driver);Server=LocalHost;Port=3306;Database=Curso; User=root; Password=NUMERO DE LA
CLAVE;Option=3;”

OTRA FORMA
Según el enlace anteriormente mencionado y que es: http://www.mvp-access.com/foro/vba-
access-mysql-revincular_topic77383.html?KW=mysql+odbc
te propone que en un formulario en la parte de form_load pongas la siguiente línea:

Private Sub Form_Load()


    InitConnect "user", "password"
End Sub
Hasta aquí todo correcto.

Luego te dice que en command del formulario escribas el siguiente código:

Private Sub Comando0_Click()


  ' NOTA:  Este código trabaja con la librería DAO.
   ' Probado conectando MySQL con Access 2010 x64.
  
   ' Variables
   Dim dbs As DAO.Database
   Dim tdf As DAO.TableDef
   Dim qdf As DAO.QueryDef
   Dim rst As DAO.Recordset
   Dim strCN As String
   Dim strRT As String 'Nombre de la tabla en el servidor remoto
   Dim strLT As String 'Nombre de la tabla local a crear
  
   ' Driver.
   Const strDriver = "{MySQL ODBC 5.2 Unicode Driver}"
   ' Base de datos.
   Const strDB = "mtto"
   ' Servidor.
   Const strServer = "{web01.centromedicodelfos.es}"
  
' Establezco la base de datos actual
Set dbs = CurrentDb
' Verifico si la consulta temporal de paso a través existe y si es así la borro
For Each qdf In dbs.QueryDefs
   If qdf.Name = "qsptTemp" Then
       If Not IsNull(dbs.QueryDefs("qsptTemp").sql) Then
           dbs.QueryDefs.Delete "qsptTemp"
       End If
   End If
Next

' Establezco la consulta de paso a través


Set qdf = dbs.CreateQueryDef("qsptTemp")

' Establezco la cadena de conexión


       strCN = _
       "ODBC;DRIVER=" & strDriver & ";" & _
       "DATABASE=" & strDB & ";" & _
       "SERVER=" & strServer
' Conecto al servidor remoto
qdf.Connect = strCN
' Consulta de paso a través
qdf.sql = "SELECT usuario FROM tblpersonal"
' Establezco el recordset a partir de los resultados de la consulta de paso a través
Set rst = dbs.OpenRecordset("qsptTemp")

If Not rst.EOF And Not rst.BOF Then


       Do Until rst.EOF ' Recorro los nombres de las tablas remotas
       strRT = rst.Fields(0)
       strLT = rst.Fields(0)
      
       strRT = "tblPersonal"
       strLT = "tblPersonal"
       ' Cadena completa de conexión.
           strCN = _
           "ODBC;DRIVER=" & strDriver & ";" & _
           "DATABASE=" & strDB & ";" & _
           "SERVER=" & strServer & ";" & _
           "TABLE=" & strRT
       
           ' Crea la tabla vinculada y la añade a la base de datos
           Set tdf = dbs.CreateTableDef(strLT, 0, strRT, strCN)
           dbs.TableDefs.Append tdf

           rst.MoveNext
       Loop
       qdf.Close
       rst.Close
   End If
   dbs.TableDefs.Refresh 'Refresco la colección TableDefs
   Application.RefreshDatabaseWindow 'Refresco la ventana de tablas
   ' Limpieza
   Set tdf = Nothing
   Set qdf = Nothing
   Set dbs = Nothing
End Sub
Y por último te dice que incorpores en un módulo lo siguiente:

Public Function InitConnect(UserName As String, Password As String) As Boolean


' Description: Should be called in the application's startup
'              to ensure that Access has a cached connection
'              for all other ODBC objects' use.
On Error GoTo ErrHandler

   Dim dbCurrent As DAO.Database


   Dim qdf As DAO.QueryDef
   Dim rst As DAO.Recordset
   Dim strConnection As String
     
   '

   strConnection = "ODBC;DRIVER={MySQL ODBC 5.2 Unicode Driver};" & _


                    "Server=" & "{web01.centromedicodelfos.es}" & ";" & _
                    "Port=" & 3306 & ";" & _
                    "Option=" & 3 & ";" & _
                    "Stmt=;" & _
                    "Database=" & "mtto" & ";"
 
   Set dbCurrent = DBEngine(0)(0)
   Set qdf = dbCurrent.CreateQueryDef("")
 
   With qdf
       .Connect = strConnection & _
                    "Uid=" & UserName & ";" & _
                    "Pwd=" & Password
       .sql = "SELECT CURRENT_USER();"
       Set rst = .OpenRecordset(dbOpenSnapshot, dbSQLPassThrough)
   End With
   InitConnect = True

ExitProcedure:
   On Error Resume Next
       Set rst = Nothing
       Set qdf = Nothing
       Set dbCurrent = Nothing
   Exit Function
ErrHandler:
   InitConnect = False
   MsgBox Err.Description & " (" & Err.Number & ") encountered", _
       vbOKOnly + vbCritical, "InitConnect"
   Resume ExitProcedure
   Resume
End Function

Hasta aquí yo creo que he conseguido hacerlo. Igual que he cambiado las variables que el decía
(servidor, puerto, base de datos, nombre de la tabla). Haciendo un debug al código que introducí
en command, parece funcionar todo pero acaba petando en la línea:

dbs.TableDefs.Append tdf
Y el error que da es el siguiente:

Se ha producido el error '3146' en el tiempo de ejecución:


ODBC: falló la llamada.
Gracias y disculpad el rollo.

Un saludo.