Actualizar campos de varios registros en un solo paso

Estoy trabajando en una BD donde una de las funciones que necesito que realice es que en un solo paso me permita actualizar más de un registro que haya seleccionado sin afectar los otros registros de la tabla. Por ejemplo. El tipo de campo que necesito actualizar es si/no (verdadero/falso) de una tabla llamada "entrenamientos". Existen ciertos registros donde debo marcar el campo "entrenamiento efectuado" de tipo si/no. Aunque necesito actualizar varios registros y los que están tildados, debo destildarlos y o viceversa. Esto lo tengo que hacer uno por uno y me lleva mucho tiempo. Existe alguna forma de realizar esto en un solo paso. ¿Alguna consulta o un código vba?

3 Respuestas

Respuesta
1

Puedes hacerlo con una consulta de actualización. Crea una copia de seguridad por si tienes algún problema. Pues los cambios hechos de manera masiva con estas consultas no se pueden deshacer.

Crea una consulta en modo diseño y despues de incluir la tabla, en la cinta de opciones seleccionas "Actualizar"

Despues pones los campos que quieras. Utilizas los criterios para seleccionar solo los registros que los cumplan y por ultimo el "actualizar a" para cambiar esos registros por el valor que quieras. Ejecutas y cambiara todos los valores de los campos que cumplan el criterio por el valor que hayas indicado.

¡Gracias! El tema es como le comente a otro experto que necesito seleccionar una cierta cantidad de registros. Te copio lo que le describí: 

  • [url=/notifications-trivial]
    1[/url]

Microsoft Access

Valeria Gomezhace 10 horas

Actualizar campos de varios registros en un solo paso

Estoy trabajando en una BD donde una de las funciones que necesito que realice es que en un solo paso me permita actualizar más de un registro que haya seleccionado sin afectar los otros registros de la tabla. Por ejemplo. El tipo de campo que necesito actualizar es si/no (verdadero/falso) de una tabla llamada "entrenamientos". Existen ciertos registros donde debo marcar el campo "entrenamiento efectuado" de tipo si/no. Aunque necesito actualizar varios registros y los que están tildados, debo destildarlos y o viceversa. Esto lo tengo que hacer uno por uno y me lleva mucho tiempo. Existe alguna forma de realizar esto en un solo paso. ¿Alguna consulta o un código vba?

2 RESPUESTAS

RESPUESTA

1

Pablo ..

Pablo .., La curiosidad es la mejor herramienta de trabajo. Para preguntas...

Puedes hacerlo con una consulta de actualización. Crea una copia de seguridad por si tienes algún problema. Pues los cambios hechos de manera masiva con estas consultas no se pueden deshacer.

Crea una consulta en modo diseño y despues de incluir la tabla, en la cinta de opciones seleccionas "Actualizar"

Despues pones los campos que quieras. Utilizas los criterios para seleccionar solo los registros que los cumplan y por ultimo el "actualizar a" para cambiar esos registros por el valor que quieras. Ejecutas y cambiara todos los valores de los campos que cumplan el criterio por el valor que hayas indicado.

hace 3 horas

¡Gracias! El tema es como le comente a otro experto que necesito seleccionar una cierta cantidad de registro. La selección de datos tampoco la tengo definida. Te comento la tabla "entrenamiento" tiene  campos 5 campos relevantes;  [código DG];[nro de revisión ];[revisión en vigencia(si/no)];[nombre] Y [entrenamiento efectuado(si/no)]. Los datos del campo código DG se repite en varios registros,  los datos de nombre son los que varían y el campo entrenamiento efectuado es el que confirmo si X persona realizó el entrenamiento correspondiente al código DG y al nro de revisión vigente. A partir de estos registros necesito saber como seleccionar una cierta cantidad basado en el código DG y el nro de revisión donde diferentes personas efectuaron su entrenamiento. El campo revisión vigente  tendré que destildarlo cuando cuando el nro de revisión cambie.  Se me ocurre un form donde pueda ingresar el código DG y al colocar el nro de revisión y así se incluirán todos los nombres que se enteraron en ese código DG y nro de revisión. Teniendo seleccionado esto necesito que con una sola acción se le quite el tilde al campo revisión en vigencia.

Muchas gracias por tu tiempo en responder. 

Respuesta
1

Adiciona a la tabla un camo ID con este podemos hacemos una selección múltiple usando un cuadro de lista, el cual lo configuras como selección simple, así puedes ir dando clic en los que vas actualizar, así podemos recorrer la colección e ir actualizando solo aquellos que se encuentren seleccionados con base el el ID, esto lo utilizo con frecuencia.

El cuadro de lista con el nombre lstEntrenamiento lo llenas con base en una consulta, eje ID, código DG,,, etc. Ahora crea un botón con el nombre btnGrabar, al botón le creas el evento Al hacer clic, algo como. Asumo que la tabla se llama Entrenamiento.

Private Sub btnGrabar_Click()

 Dim varPosicion As Variant

 Dim lnID as Long

If   Me.lstEntrenamiento.ItemsSelected.Count=0 then

    msgbox "No hay registros seleccionados",vbinformation, "Entrenamientos"

    Me.lstEntrenamiento.SetFocus

   Exit Sub

endif

' Recorremos el cuadro de lista con los items seleccionados

For Each varPosicion In lstEntrenamiento.ItemsSelected

  lnID=Me.lstEntrenamiento.ItemData(varPosición)

  Docmd.RunSQL "UPDATE  Entremimento SET Entrenamiento. [entrenamiento efectuado]=TRUE" &  " WHERE Entenamiento.ID=" & lnID

Next

End Sub

Esta es la forma más profesional de hacer esta clase de actualizaciones, espero te sirva. No obstante, falta en el código la captura de errores.

Respuesta
1

Por código VBA puedes hacer casi todo lo que se te ocurra, y por medio de consultas tendrás que usar una consulta de actualización, en la que necesitarás algún criterio para identificar los registros a actualizar, pues de otro modo te actualizará toda la tabla...

Sin saber cómo haces la selección de registros a actualizar no te puedo decir nada más concreto.

Un saludo


Sveinbjorn El Rojo muchas gracias por responder.  La selección de datos tampoco la tengo definida. Te comento la tabla "entrenamiento" tiene tres campos relevantes;  [código DG];[nro de revisión ];[revisión en vigencia(si/no)];[nombre] Y [entrenamiento efectuado(si/no)]. Los datos del campo código DG se repite en varios registros,  los datos de nombre son los que varían y el campo entrenamiento efectuado es el que confirmo si X persona realizó el entrenamiento correspondiente al código DG y al nro de revisión vigente. A partir de estos registros necesito saber como seleccionar una cierta cantidad basado en el código DG y el nro de revisión donde diferentes personas efectuaron su entrenamiento. El campo revisión vigente  tendré que destildarlo cuando cuando el nro de revisión cambie.  Se me ocurre un form donde pueda ingresar el código DG y al colocar el nro de revisión y así se incluirán todos los nombres que se enteraron en ese código DG y nro de revisión. Teniendo seleccionado esto necesito que con una sola acción se le quite el tilde al campo revisión en vigencia. Espero haberme hecho entender. Muchas gracias! 

Ok, si seleccionas en el formulario el código DG y nro de revisión, puedes actualizar todos esos registros con una SQL de actualización.

Por ejemplo, pones un botón y le asocias este código:

Private Sub ..._Click

CurrentDb.Execute "UPDATE entrenamiento SET [revisión vigente]=0 WHERE [Código DG]='" & Me.[Código DG] & "' AND [nro de revisión ]='" & Me.[nro de revisión] & "'"

End If

Si los campos fueran numéricos y no de texto, sería así:

CurrentDb.Execute "UPDATE entrenamiento SET [revisión vigente]=0 WHERE [Código DG]=" & Me.[Código DG] & " AND [nro de revisión ]=" & Me.[nro de revisión ] 

Revisa los nombres que puse, pues no son exactamente los que tienes tú, porque no me queda claro si el (Sí/No) forma parte del nombre o es el tipo de datos... Los que llevan el "Me." delante hacen referencia a los nombres que tengas en el formulario (propiedades->Otras->Nombre) no en la tabla.

Hola!  Perdón por la demora. Intente trabajar con el código que me ofreciste pero creo que hay algo que estoy poniendo y no Se que es porque me dice "error de complicación: se esperaba: número de línea o declaración o fin de la instrucción. Y la parte: AND [Revisión ]=& Me.[Revisión]  aparece en rojo.

Es difícil decirte sin ver el código completo, pero si lo tienes puesto tal y como lo pusiste arriba, te falta una comilla doble antes del &:

AND [Revisión ]=" & Me.[Revisión]

hola nuevamente! Te transcribo el código completo por el cual me sale un "error de complicación,  el uso de la propiedad no es valido "

CurrentDb. Ejecute "UPDATE entrenamientos"

Set [En vigencia]=0(esta parte la resalta en amarillo) 

Where [Codigo Documento de Gestión]="&Me. [Codigo Documento de Gestión ]&"

End Sub

CurrentDb.Execute "UPDATE entrenamientos Set [En vigencia]=0 Where [Codigo Documento de Gestión]=" & Me. [Codigo Documento de Gestión ]

Si lo pones en varias lineas, tienes que encadenarlo:

CurrentDb.Execute "UPDATE entrenamientos " _

 & "Set [En vigencia]=0 " _

& "Where [Codigo Documento de Gestión]=" & Me. [Codigo Documento de Gestión ]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas