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 de diegofvillar
1
1
diegofvillar, Amplio conocimiento de programación (Técnico/Programador Access y...
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 bucleverificando 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'.