Actualizar datos en grupo

A ver si me explico y me puedes ayudar.
Tengo un formulario basado en una consulta que toma datos de una tabla. En el encabezado del formulario tengo un cuadro de texto independiente, y en el detalle los datos de la consulta (no modificables) y una casilla de verificación (modificable)
Necesito crear un botón "Actualizar" de forma que tome los registros que tienen la casilla de verificación marcada, les añada a cada uno el texto del cuadro de texto del encabezado y añada los registros a otra tabla.
Respuesta
1
Te puedo ayudar, pero sería interesante saber si 'los datos de la consulta' que dices que no son modificables, son datos que no se modifican porque están desactivados o bloqueados los textbox o porque es una consulta no modificable en sí.
Podrías generar un evento click en el botón 'Actualizar' que dices y crear un bucle para cada los registros en 'Detalle' que vaya verificando la casilla y si está marcada que añada los datos que necesitas y automáticamente haga un insert en otra tabla para proseguir con el siguiente registro. Debes utilizar un 'Do Until .... Loop' o 'For.. Next'.
Esperaré tu comentario para ver si cómo están activados tus textbox, y luego trabajaremos tomando en cuenta lo que te dije en el párrafo anterior.
Buenos días y ante todo, gracias por contestar.
Los datos que no se pueden modificar están los textbox bloqueados.
Además, quería programar un botón para que marque y desmarque todas las casillas de verificación.
Espero tu respuesta y gracias de nuevo.
Primero vas a crear un formulario de tu tabla al cual vas a destinar los cambios, y vamos a recorrer cada registro luego al actualizar, verificando la casilla y copiando el contenido de tu textbox al cual vas a añadir los datos del textbox independiente.
Vamos a crear una rutina en un módulo, y te lo iré explicando lo que se puede hacer, y vos le vas a dar los detalles de tu propio sistema.
'---------------------------------------
Sub Actualizar()
On Error GoTo Caso_de_Errores
    Dim sigue as byte
    Dim Texto_a_añadir as string
    Dim TextoCompleto as string
    sigue = MsgBox("Desea Actualizar los datos?", 260, "Mensaje")
    If sigue <> 6 Then Exit Sub
    DoCmd.Echo True, "Actualizando datos ..."
    'aquí defines tu texto que vas a añadir
    Texto_a_añadir = Forms![Formulario_tabla_origen]![tu_textbox_independiente]
    'aquí abriremos tu formulario en forma oculta para ir tirando los datos desde el otro formulario
    DoCmd. OpenForm "Formulario_tabla_destino", acNormal,,, acFormReadOnly, acHidden
'contamos cuantos registros tenes en tu formulario que te muestra la casilla
    Cant_reg = Dcount("Id", "tutablaOrigen")
   ' y comenzamos a recorrer el bucle verificando la casilla
For I = 1 To Cant_reg
'verificamos la casilla, si la casilla está marcada añade, si no está marcada va al siguiente
        If Forms![Formulario_tabla_origen]![Casilla] = 0 Then
        GoTo Siguiente
        Else
        TextoCompleto = Forms![Formulario_tabla_origen]![TextboxBloquado] &         Texto_a_añadir
        GoTo Guarda_reg
        End if
Siguiente:
DoCmd.GoToRecord acDataForm, "formulario_tabla_origen", acNext     
Guarda_reg:
        Forms![formulario_tabla_destino]![textocompleto] = TextoCompleto
'aqui guarda el texto del textbox bloqueado  + el texto independiente añadido
If I < Cant_reg Then DoCmd.GoToRecord acDataForm, "Formulario_tabla_origen", acNext
Next I
'al terminar va al primero en ambos formularios y cierra mostrando un msgbox al finalizar
DoCmd.GoToRecord acDataForm, "Formulario_tabla_destino", acFirst
DoCmd.GoToRecord acDataForm, "Formulario_tabla_origen", acFirst
Sale_de_Sub_Actualizar:
    DoCmd.Close acForm, "Formulario_tabla_destino", acSaveNo
    MsgBox "El proceso ha finalizado exitosamente", vbInformation, "Actualización de datos"
    DoCmd.Close
    Exit Sub
Caso_de_Errores:
    MsgBox Err.Description + Chr(13) + "en Sub Actualizar"
    Resume Sale_de_Sub_Actualizar
End Sub
'-----------------------------------------
Con este debes agregar tus campos como también adaptar a tu sistema.
Buenos días.
He copiado el código pero he tenido que hacer alguna modificación:
Lo que quería hacer no era modificar el campo de texto existente en la tabla destino, sino añadir registros nuevos, con los datos de cada registro del formulario origen más el campo texto_independiente para todos igual. Eso ya lo he solucionado.
- DoCmd.OpenForm "Formulario_tabla_destino", acNormal, , , acFormReadOnly, acHidden
le he quitado el acFormReadOnly, porque no me dejaba entrar datos.
Al principio de la subrutina Guarda_reg he añadido
DoCmd.GoToRecord acDataForm, "Tratamientos", acNewRec
porque no añadia registros nuevos, sino que machacaba el existente.
Y ahora el problema que tengo es que se salta algunos registros, estoy investigando por qué. Si se te ocurre algo dímelo, por favor.
Y otra cosa, ¿no sería más sencillo hacerlo a través de consultas de actualización?
Puede ser que funcione, pero yo me voy más por el código. Me parece correcto que hayas modificado el código ya que era al solo efecto de ejemplo. En cuanto a lo que me comentas, pon un punto de interrupción al inicio de tu rutina y verifica con 'F8' que esté haciendo lo correcto paso a paso. En teoría debe recorrer todos los registros del formulario mostrando en pantalla y no saltar, si lo hace es porque algo no está bien o está duplicado. Verifica la parte que va entre 'For... Next'.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas