Saltar al contenido

Actualizar tabla de Access desde Excel


Recommended Posts

publicado

Buenas, estoy intentando hacer una macro (fichero Actualizar_Access) para añadir a una hoja distintos botones y actualizar desde ahí una serie de tablas de una BBDD en Access. No lo he hecho nunca. Hice un pequeño ejemplo para actualizar desde ahí, la tabla PEDIDOS de Access con la Hoja1 del fichero DATOS. Pero solo quiero que agregue los registros nuevos (la clave es el ID) y en Hoja1 ahora mismo hay 3 registros nuevos. Pensaba que sería más sencillo, pero no encuentro mucho por ahí de cómo hacer esto. Alguna ayuda? Os envío los archivos con el pequeño módulo que hice y me da error.
Gracias. 

ejemplo.zip

publicado

Gracias, Abraham. He visto el vídeo. Iré probando, aunque no he visto cómo cargar los datos sin duplicados... ya sabes, que solo me cargue los registros nuevos.  

publicado

Prueba la macro: 

Sub ActualizarPedidos()
Dim cnn As Object
Dim cmd As Object
Dim rst As Object
'--
Set cnn = New ADODB.Connection
With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\ejemplo.accdb" '<------
    .Open
End With
'--
Workbooks.Open (ThisWorkbook.Path & "\Datos.xlsx") '<-------
For x = 4 To Range("A" & Rows.Count).End(xlUp).Row
   Set cmd = New ADODB.Command
   With cmd
      .ActiveConnection = cnn
      .CommandText = "Select * From Pedidos Where ID=" & Range("A" & x)
      .CommandType = adCmdText
      Set rst = cmd.Execute
      If rst.EOF Then
         Sql = "INSERT INTO Pedidos VALUES("
         Sql = Sql & Range("A" & x) & ","
         Sql = Sql & "'" & Range("B" & x) & "',"
         Sql = Sql & Range("C" & x) & ","
         Sql = Sql & Range("D" & x) & ","
         Sql = Sql & "#" & Format(Range("E" & x), "mm/dd/yyyy") & "#)"
         .CommandText = Sql
         .CommandType = adCmdText
         cmd.Execute
      End If
   End With
Next
cnn.Close
ActiveWorkbook.Close
End Sub

 

publicado
hace 20 minutos , Antoni dijo:

Prueba la macro: 

Sub ActualizarPedidos()
Dim cnn As Object
Dim cmd As Object
Dim rst As Object
'--
Set cnn = New ADODB.Connection
With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\ejemplo.accdb" '<------
    .Open
End With
'--
Workbooks.Open (ThisWorkbook.Path & "\Datos.xlsx") '<-------
For x = 4 To Range("A" & Rows.Count).End(xlUp).Row
   Set cmd = New ADODB.Command
   With cmd
      .ActiveConnection = cnn
      .CommandText = "Select * From Pedidos Where ID=" & Range("A" & x)
      .CommandType = adCmdText
      Set rst = cmd.Execute
      If rst.EOF Then
         Sql = "INSERT INTO Pedidos VALUES("
         Sql = Sql & Range("A" & x) & ","
         Sql = Sql & "'" & Range("B" & x) & "',"
         Sql = Sql & Range("C" & x) & ","
         Sql = Sql & Range("D" & x) & ","
         Sql = Sql & "#" & Format(Range("E" & x), "mm/dd/yyyy") & "#)"
         .CommandText = Sql
         .CommandType = adCmdText
         cmd.Execute
      End If
   End With
Next
cnn.Close
ActiveWorkbook.Close
End Sub

 

Gracias, Antoni! funciona perfecto para el ID, lo entiendo genial como punto de partida, voy a seguir probando con otro tipo de datos a la hora de cargar sin duplicados. Gracias de nuevo!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.