Access - Código para leer una tabla y anexar datos a otra.

 
Vista:
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Código para leer una tabla y anexar datos a otra.

Publicado por TinoS (76 intervenciones) el 02/12/2013 21:29:32
Buenas noches.

Tengo una base de datos con varias tablas y lo que quiero hacer y no se cómo, es, mediante código, (no por consulta) leer uno por uno todos los registros de la tabla y en función del cumplimiento de ciertas condiciones que se pongan, anexar esos registros a otra tabla para con esta emitir luego el informe que interese.

Muchas gracias por vuestra atención.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Código para leer una tabla y anexar datos a otra.

Publicado por Norberto (753 intervenciones) el 03/12/2013 09:01:52
Hola.

Puedes hacerlo de la siguiente manera.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Sub ActualizarTabla()
    Dim Rst1 As DAO.Recordset, Rst2 As DAO.Recordset
    'Definimos sendas variables para referirnos a los
    'conjuntos de registros correspondientes a las dos tablas
 
    Set Rst1 = CurrentDb.OpenRecordset("Tabla1")
    Set Rst2 = CurrentDb.OpenRecordset("Tabla2")
    'Abrimos las dos tablas asignándo sus registros a las variables
    'siendo el primero el que corresponde a la tabla origen
    'y el segundo a la de destino.
 
    Do While Not Rst1.EOF
        'Para cada registro de la tabla origen
        If condiciones Then 'Si se dan las condiciones
            Rst2.AddNew     'Añadimos un registro en la
                            'tabla destino
            Rst2!Campo1 = Rst1!Campo1   'Asignamos valores a los campos
            ...
            ...
            Rst2.Update     'Grabamos el registro
        End If
        Rst1.MoveNext       'Pasamos al siguiente registro de la tabla origen
        DoEvents            'Por si acaso
    Loop
 
    Rst1.Close  'Cerramos los recordsets
    Rst2.Close
 
    Set Rst1 = Nothing  'Vaciamos las variables
    Set Rst2 = Nothing
 
End Sub

Las conciciones se supone que las harás comparando campos de la tabla1. Para referirte a ellos, usa Rst1!Campo.

Si al definir las variables escribes DAO. y no se despliegan las opciones, es que no tienes la referencia correspondiente. En el editor de VBA vas al menú Herramientas->Referencias buscas Microsoft DAO x.xx Object Library y la activas.

Un saludo,

Nor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Código para leer una tabla y anexar datos a otra.

Publicado por TinoS (76 intervenciones) el 03/12/2013 18:21:00
Buenas tardes.

Muchísimas gracias Norberto. Se que todo esto va a funcionar, el único problema está en que yo sepa aplicar todo lo que aquí me indicas. Lo intentaré y si tengo, que tendré, "algún otro problema" ya lo comento por aquí.

Gracias de nuevo.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Código para leer una tabla y anexar datos a otra.

Publicado por Anita (22 intervenciones) el 04/12/2013 18:54:40
Hola a todos,

Norberto me gustaría, si es posible, me ayudaras a entender la siguiente linea que incluyes en tu respuesta:

DoEvents 'Por si acaso


el resto del código creo haberlo entendido bien pero con esa me perdí, no se si es necesario ponerla y qué hace exactamente..

Muchísimas gracias.

Anita.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Código para leer una tabla y anexar datos a otra.

Publicado por Norberto (753 intervenciones) el 05/12/2013 09:30:28
Jajajaja.

La Función DoEvents permite "sacar" al sistema del bucle y que el Windows pueda procesar otros eventos. Si no se pone, se queda todo (en este caso Access) bloqueado hasta que termine. Si por lo que fuera el bucle fuese infinito (se nos ha olvidado poner Rst1.MoveNext), Access no recuperaría nunca el control y no podríamos hacer nada sino cerrarla a la brava finalizando tarea. El poner esta función nos aseguramos de poder intercambiarnos entre Access y el editor de VBA y que los botones de pausar y detener código funcionen.

Yo, siempre que comienzo un bucle Do While ... Loop, lo primero que pongo es DoEvents entre los dos, que ya me ha pasado más de una vez no tener guardado el módulo y tener que que finalizar Access perdiéndolo todo.

Puedes ver un ejemplo de lo que ocurre cuando se procesa un bucle con y sin DoEvents con el ejemplo adjunto.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Código para leer una tabla y anexar datos a otra.

Publicado por Anita (1 intervención) el 06/12/2013 18:05:32
Muchismas gracias Norbeto, con el ajemplo vi la utilidad de dicho comando, a partir de ahora lo usaré en mis bucles de repetición. Desconozco si se ha de usar en otras instancia .

Muy agradecida por tu tiempo dedicado.
Anita.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Código para leer una tabla y anexar datos a otra.

Publicado por Norberto (753 intervenciones) el 09/12/2013 13:00:40
Hola de nuevo.

En principio no veo necesario su uso fuera de un bucle. De hecho, si usas FileCopy para copiar un archivo, da igual que pongas DoEvents o no. Hasta que no se termina la copia, el control no vuelve a Access.

Un saludo y hasta otra,

Nor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Código para leer una tabla y anexar datos a otra.

Publicado por JESUS ALBERTO (5 intervenciones) el 01/09/2020 20:25:31
Yo tengo el mismo caso, solo que leo dos tablas y grabo en una tercera tabla, solo que me marca un error NO SE HA DEFINIDO EL TIPO DEFINIDO POR EL USUARIO y sale en los DIM

Este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Public Sub ActualizarTabla()
    Dim Colab As DAO.Recordset, DetFolio As DAO.Recordset, ComColab As DAO.Recordset
    'Definimos sendas variables para referirnos a los
    'conjuntos de registros correspondientes a las tres tablas
 
    Set Colab = CurrentDb.OpenRecordset("Colaboradores")
    Set DetFolio = CurrentDb.OpenRecordset("Detalle Folio")
    Set ComColab = CurrentDb.OpenRecordset("Comision Colaboradores")
    'Abrimos las tres tablas asignándo sus registros a las variables
    'siendo el primero el que corresponde a la tabla de empleados, el segundo a la del registro de comisiones
    'y el tercero donde se guardaran los datos, segun cumpla con las condicionantes que siguen adelante.
 
    Do While Not Colab.EOF
        Do While Not DetFolio.EOF
           If DetFolio!Fotografo = [Colab!Nombre Colaborador] Then
           ComColab!F_Comision = DetFolio!DR_FComision
           Else
           ComColab!F_Comision = 0
           End If
           If DetFolio!DR_Vendedor = [Colab!Nombre Colaborador] Then
           ComColab!V_Comision = DetFolio!DR_VComision
           Else
           ComColab!V_Comision = 0
           End If
           If DetFolio!DR_Cajero = [Colab!Nombre Colaborador] Then
           ComColab!C_Comision = DetFolio!DR_CComision
           Else
           ComColab!C_Comision = 0
           End If
           ComColab.AddNew
           ComColab.Update
           Det.Folio.MoveNext
           DoEvents
        Loop
        DoEvents
     Loop
 
   Close Colab
   Close DetFolio
   Close ComColab
 
   Set Colab = Nothing
   Set DetFolio = Nothing
   Set ComColab = Nothing
 
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Código para leer una tabla y anexar datos a otra.

Publicado por Anonimo (3314 intervenciones) el 02/09/2020 09:18:21
Yo plantearía la solución al entorno planteado de otra forma:

.- Una consulta permitirá generar el conjunto de datos de origen (asociando ambas tablas)

.- Esa misma consulta u otra a continuación que utilice la anterior (esta vez de inserción o de actualización según sea lo que se necesita) obtiene el resultado deseado.

Si hay un problema con la definición de los datos, solo en el entorno de trabajo se puede conocer la causa (que puede ser tan simple como que se repita el nombre de un objeto).

Una forma de comprobar quien es el causante, es eliminar uno a uno los objetos que se definen y verificar así si el problema esta en la definición de los recordset (fallaría con todos de forma individualizada) o de alguno en particular, que seria el problema a localizar o el nombre a corregir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Código para leer una tabla y anexar datos a otra.

Publicado por Manuel Sanchez Guillen (1 intervención) el 16/11/2021 11:42:14
Hola yo tengo el mismo problema pero necesito hacerlo por medio de tabla o consulta, como se podria hacer, muchas gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar