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

   
Vista:

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

Publicado por TinoS (64 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

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

Publicado por Norberto (432 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
0
Comentar

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

Publicado por TinoS (64 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 (21 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

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

Publicado por Norberto (432 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

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

Publicado por Norberto (432 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