Le dejo estas opciones:
Opción 1- Creando un DSN
Para importar una tabla de SQL Server a Microsoft Access ya establecida la conexión, puedes seguir estos pasos:
Abrir Microsoft Access: Inicie su base de datos de Access donde desea importar la tabla.
Ir a la pestaña "Datos Externos": En la cinta de opciones, haga clic en la pestaña "Datos Externos".
Seleccionar "Desde ODBC": En el grupo "Importar y vincular", selecciona "Desde ODBC". Esto abrirá el asistente para importar datos.
Elegir la fuente de datos: En la ventana que se abre, selecciona la fuente de datos ODBC correspondiente a su conexión de SQL Server y haga clic en "Aceptar".
Seleccionar la tabla: Aparecerá una lista de las tablas disponibles en la base de datos de SQL Server. Seleccione la tabla que desea importar.
Elegir las opciones de importación: Puede optar por importar los datos a una nueva tabla o vincularlos a la tabla existente. Si elige importar, se copiarán todos los datos a Access.
Finalizar el proceso: Sigue las instrucciones del asistente para completar la importación. Puede tener la opción de especificar si deseas incluir los nombres de campo en la primera fila, entre otras configuraciones.
Verificar la importación: Una vez completada la importación, verifique que los datos se hayan transferido correctamente a Access.
Opción 2 -Sin un DSN y VBA
Sub ImportarTablaDesdeSQLServerSinDSN()
Dim cn As Object
Dim rs As Object
Dim strSQL As String
Dim strConn As String
Dim nombreTabla As String
Dim nombreTablaDestino As String
Dim db As DAO.Database
Dim newRecord As DAO.Recordset
' Nombre de la tabla en SQL Server
nombreTabla = "NombreDeTuTabla"
' Nombre de la tabla destino en Access
nombreTablaDestino = "NuevaTabla"
' Cadena de conexión OLE DB
strConn = "Provider=SQLOLEDB;Data Source=suServidor;Initial Catalog=suBaseDeDatos;User ID=suUsuario;Password=suContraseña;"
' SQL para seleccionar los datos
strSQL = "SELECT * FROM " & nombreTabla
' Crear el objeto de conexión
Set cn = CreateObject("ADODB.Connection")
cn.Open strConn
' Crear el objeto Recordset
Set rs = CreateObject("ADODB.Recordset")
rs.Open strSQL, cn
' Crear la tabla en Access si no existe
Set db = CurrentDb
On Error Resume Next
db.Execute "DROP TABLE " & nombreTablaDestino ' Eliminar tabla si existe
On Error GoTo 0
' Crear la nueva tabla
Db. Execute "CREATE TABLE " & nombreTablaDestino & " (ID AUTOINCREMENT PRIMARY KEY, Campo1 TEXT, Campo2 TEXT)" ' Ajusts los campos según tus necesidades
' Copiar los datos del Recordset a la tabla
Set newRecord = db.OpenRecordset(nombreTablaDestino, dbOpenDynaset)
Do While Not rs.EOF
newRecord.AddNew
For i = 0 To rs.Fields.Count - 1
newRecord.Fields(i).Value = rs.Fields(i).Value
Next i
newRecord.Update
rs.MoveNext
Loop
' Cerrar el Recordset y la conexión
rs.Close
cn.Close
' Limpiar objetos
Set rs = Nothing
Set cn = Nothing
Set newRecord = Nothing
Set db = Nothing
MsgBox "Importación completada con éxito.", vbInformation
End Sub
Opción 3 - Sin DSN- cadena de conexión OLE DB
Sub ImportarTablaDesdeSQLServerSinDSN()
Dim cn As Object
Dim rs As Object
Dim strSQL As String
Dim strConn As String
Dim nombreTabla As String
Dim nombreTablaDestino As String
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
' Nombre de la tabla en SQL Server
nombreTabla = "NombreDesuTabla"
' Nombre de la tabla destino en Access
nombreTablaDestino = "NuevaTabla"
' Cadena de conexión OLE DB
strConn = "Provider=SQLOLEDB;Data Source=suServidor;Initial Catalog=suBaseDeDatos;User ID=suUsuario;Password=suContraseña;"
' SQL para seleccionar los datos
strSQL = "SELECT * FROM " & nombreTabla
' Crear el objeto de conexión
Set cn = CreateObject("ADODB.Connection")
cn.Open strConn
' Crear el objeto Recordset
Set rs = CreateObject("ADODB.Recordset")
rs.Open strSQL, cn
' Crear la tabla en Access
Set db = CurrentDb
Set tdf = db.CreateTableDef(nombreTablaDestino)
' Agregar campos a la tabla
For Each fld In rs.Fields
tdf.Fields.Append tdf.CreateField(fld.Name, IIf(fld.Type = adVarChar, dbText, dbMemo))
Next fld
' Crear la tabla en Access
db.TableDefs.Append tdf
' Copiar los datos del Recordset a la tabla
Do While Not rs.EOF
Dim newRecord As DAO.Recordset
Set newRecord = db.OpenRecordset(nombreTablaDestino, dbOpenDynaset)
newRecord.AddNew
For Each fld In rs.Fields
newRecord.Fields(fld.Name).Value = fld.Value
Next fld
newRecord.Update
NewRecord. Close
Rs. MoveNext
Loop
' Cerrar el Recordset y la conexión
Rs. Close
Cn. Close
' Limpiar objetos
Set rs = Nothing
Set cn = Nothing
Set tdf = Nothing
Set db = Nothing
MsgBox "Importación completada con éxito.", vbInformation
End Sub
4. Opción - Usar una herramienta de terceros
En este caso puede utilizar
- ESF Database Migration Toolkit - Professional
- Db Convert Studio
Etc
Y al fin no dijo nada, dónde está el código VBA - Eduardo Pérez Fernández
A quien ha creado la aplicación, se le da por supuesta la capacidad de poner en marcha la idea y si tiene alguna duda la puede exponer, El mejor método es aquel que mejor se acople a lo que ya es funcional y recuerda, una fregona (un trapo atado a un palo) es la idea, el resto es comercializarla. - Enrique Feijóo