Necesito una rutina para copiar registros en ACCESS VB

Necesito una pequeña rutina donde pueda copiar, sin runsql, los registros de una tabla a otra que es exactamente igual, en realidad la estoy copiando de un entorno remoto a mi entorno local.
Para ello estoy utilizando los módulos
' Esta parte me borra la tabla sin poner ningun mensaje (aunque sea lenta)
       DoCmd.OpenTable "local_campos", acViewNormal, acEdit
       Set local_campos = CurrentDb()
       LSQL = "SELECT * FROM local_campos"
       Set Reg_local_campos = local_campos.OpenRecordset(LSQL)
          Reg_local_campos.MoveFirst
          Do Until Reg_local_campos.EOF
             Reg_local_campos.Delete
             Reg_local_campos.MoveNext
          Loop
          If Reg_local_campos.EOF Then
             IND_FIN = "S"
          End If
       End If
       DoCmd.Close acTable, "local_campos", acSaveYes
    Loop
    ' Esta es la parte que empecé de copia
       DoCmd.OpenTable "sololect_campos", acViewNormal, acReadOnly
       Set Tabla_Trabajo = CurrentDb
       DoCmd.OpenTable "local_campos", acViewNormal, acEdit
       Set local_campos = CurrentDb
       LSQL = "SELECT sololect_campos.* FROM sololect_campos "
       LSQL = LSQL & "WHERE (((sololect_campos.campoe)=14 "
       LSQL = LSQL & "Or (sololect_campos.campoe)=141))"
       Set Reg_Tabla_Trabajo = Tabla_Trabajo.OpenRecordset(LSQL)
' Me situo en la primera a copiar
       Reg_Tabla_Trabajo.MoveFirst
       Do Until Reg_Tabla_Trabajo.EOF
' Creo un nuevo registro en la tabla local         
          Reg_local_campos.AddNew
' ¿Como le indíco donde estan los datos a copiar?
' Seria como un similar a
'          Reg_local_campos() = Reg_Tabla_Trabajo()
' no se si hace falta dar un update después.
          Reg_local_campos.Update
          Reg_Tabla_Trabajo.MoveNext
       Loop
       If Reg_local_campos.EOF Then
          IND_FIN = "S"
       End If
       DoCmd. Close acTable, "local_campos", acSaveYes
       DoCmd. Close acTable, " sololect_campos ", acSaveNo

1 respuesta

Respuesta
1
¿Si ya tienes la rutina que es lo que quieres?
Si ves la rutina, comprobaras que pregunto
-¿Cómo le indico donde están los datos a copiar?
-no se si hace falta dar un update despues.
Ya efectué esta rutina con runsql pero me pregunta si quiero insertar por filas, y quiero evitar que me salga ese mensaje, pues las tablas donde voy a insertar son de trabajo.
Gracias por contestarme, en las dos últimas consultas (no me acuerdo a que experto iban) no me contestaron, y si puedes ayudarme algo más te lo agradezco.
La rutina es bien rara para mi
Abres una tabla y luego la usas como una variable y usas set
o sea
   DoCmd. OpenTable "local_campos", acViewNormal, acEdit
esto abre una tabla pero el usuario la ve
       Set local_campos = CurrentDb()
Esto asigna una referencia a la base a... una variable que no esta dimensionada (DIM ) o tomala tabla y la empieza a manejar ...
No se tendré que probar
Pero de todas maneras no es la forma adecuada
borra todo y usa esto,
esto copia los datos de tabla en tabla2
Dim r as recorset, r1 as recordset
set r = currentdb.openrecordset("Select * from Tabla")
set r1 = currentdb.openrecordset("Select * from Tabla2")
if r.recordcount>0 then
    r.movelast
     r.movefirst
    for a=1 to r.recordcount
        r1.addnew       
        r1!Stock=r!stock
otros campos.........
        r1.update
        r1.movenext
        r.movenext
     next
end if
Debido a mi desconocimiento puse funciones o instrucciones (como quieras llamarle) que no sabia si se escribía de esa forma, era una forma de indicar lo que quería hacer.
De todas formas me has indicado correctamente lo que quería.
Desde mi punto de vista y debido a creo no me explique correctamente, es una VERDADERA MARAVILLA lo que has realizado.
Muchas gracias.
No solo has sabido darme una respuesta buena, sino que has intentado ( y lo has conseguido) el entender mi pregunta.
- Si tienes algún problema con Excel y sus macros no dudes en consultarme -

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas