Access - hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

 
Vista:
Imágen de perfil de Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Felix (74 intervenciones) el 11/05/2015 20:01:28
Saludos tengo un campo de numero de horas (es variable) NhL y un campo dia1. Necesito que al ingresar en el cuadro de texto del formulario el numero de horas por ejemplo 4 (horas) este dato se actualice en todos los registros existentes del campo dia (ejemplo tengo 80 registros y no pienso añadir mas registros solo esos) pero el numero de horas va a variar en otra ocasion y borraria el 4 y por ejemplo pondria 2 (horas). Como puedo hacer que access haga esta accion???
De antenamo Gracias por su ayuda
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

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Norberto (753 intervenciones) el 12/05/2015 13:56:11
Hola.

No dices cómo se llaman ni la tabla ni el cuadro de texto donde cambias las horas. Los llamaremos Tabla y txtHoras, respectivamente. Tendrías que ejecutar la siguiente secuencia SQL:

DoCmd.RunSQL "UPDATE [Tabla] SET NhL = " & Me.txtHoras

Un saludo,

Norberto.
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
Imágen de perfil de Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Felix (74 intervenciones) el 12/05/2015 17:01:54
Si es cierto que no he especificado bien pero Gracias por la ayuda, he puesto el codigo que me has enviado en evento después de actualizar No se si sera mejor ponerlo en el evento al cambiar
ahora como tengo en la tabla los campos NhL (significa: numero de horas para el dia Lunes), tambien tengo para el resto de dias hasta el viernes (NhM; NhMi; NhJ y NhV), a estos los en nombrado en el formulario anteponiendoles a cada uno Ctx. Les he copiado el mismo codigo con su correspondiente campo y Ctx

DoCmd.RunSQL "UPDATE [Asistencia] SET NhL = " & Me.CtxNhL

Pero, en ejecucion, al cambiar el numero por otro me sale en cada uno el siguiente mensaje
Va a actualizar 61 filas
Si hace clic en si, no podra utilizar el comando Deshacer para deshacer los cambios
¿Confirma que desea actualizar estos registros?
Si No
seleccione si cada vez

pero cuando trato de confirmar en el formulario en cualquiera de los registros me sale el siguiente mensaje

conflicto de escritura
otro usuario modifico este regsitro despues de que usted comenzo a modificarlo. si lo guarda, sobreescribira los cambios que hizo el otro usuario.
Si copia los cambios al portapapeles podra ver los valores que introdujo el otro usuario, y despues puede volver a pegar sus cambios si asi lo decide
Guardar registro copiar al portapapeles No hacer cambios

yo marco la x para que se cierre

Reviso la table y ve que los cambios estan hechos

pero todos esos mensajes quiza pueda minimizar a uno si agrego un boton que al hacer click se actualize todo y si sale el mensaje se hara una sola vez -supongo-.
en cuanto al conflicto no tengo idea de las razones.

Espero tu comentario y Gracias
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Felix (74 intervenciones) el 12/05/2015 22:46:19
Hola Norberto, te comento,
Como tengo en la tabla los campos NhL (significa: número de horas para el dia Lunes), tambien tengo para el resto de dias hasta el viernes (NhM; NhMi; NhJ y NhV), a estos los en nombrado en el formulario anteponiendoles a cada uno Ctx. Les he copiado el mismo codigo con su correspondiente campo y Ctx, he colocado un botón de comando CmdCambiar_hora y en evento click he puesto el código que me diste para todos los días

1
2
3
4
5
6
7
Private Sub Cambiar__Horas_Click()
DoCmd.RunSQL "UPDATE [Asistencia] SET NhL = " & Me.CtxNhL
DoCmd.RunSQL "UPDATE [Asistencia] SET NhM = " & Me.CTxNhM
DoCmd.RunSQL "UPDATE [Asistencia] SET NhMi = " & Me.CtxNhMi
DoCmd.RunSQL "UPDATE [Asistencia] SET NhJ = " & Me.CtxNhJ
DoCmd.RunSQL "UPDATE [Asistencia] SET NhV = " & Me.CtxNhV
End Sub
Al ejecutarlo me salen cinco avisos para confirmar el cambio, luego al hacer click en cualquier registro que se ve en el formulario me sale el siguiente mensaje:
Conflicto de escritura
otro usuario modifico este regsitro despues de que usted comenzo a modificarlo. si lo guarda, sobreescribira los cambios que hizo el otro usuario.
Si copia los cambios al portapapeles podra ver los valores que introdujo el otro usuario, y despues puede volver a pegar sus cambios si asi lo decide
Guardar registro copiar al portapapeles No hacer cambios

yo marco la x para que se cierre

Reviso la tabla y veo que los cambios estan hechos, todo esta bien
Pero…
Habrá una forma de evitar esos mensajes???
Gracias
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

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Norberto (753 intervenciones) el 13/05/2015 13:01:11
Hola.

Para evitar los mensajes debes de poner DoCmd.SetWarnings False antes de empezar a ejecutar la SQL y para volverlos a activar DoCmd.SetWarnings True al terminar. También puedes ponerlo todo en una sola SQL de la siguiente manera:

1
2
3
4
5
6
7
8
9
Private Sub Cambiar_Horas_Click()
    DoCmd.SetWarnings False
    DoCmd.RunSQL "UPDATE [Asistencia] SET NhL = " & Me.CtxNhL & ", " & _
                                         "NhM = " & Me.CtxNhM & ", " & _
                                         "NhMi = " & Me.CtxNhMi & ", " & _
                                         "NhJ = " & Me.CtxNhJ & ", " & _
                                         "NhV = " & Me.CtxNhV
    DoCmd.SetWarnings True
End Sub

En cuanto al mensaje de conflicto, puede ser que el registro activo del formulario esté en edición en el momento que pulsas el botón de actualizar. Prueba a poner justo al principio DoCmd.RunCommand acCmdSaveRecord a ver si es por eso.

Un saludo,

Norberto.
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
Imágen de perfil de Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Felix (74 intervenciones) el 13/05/2015 19:35:10
Exactamente Nortberto el codigo que me envias ha solucionado la aparicion de los cinco mensajes al aplicar el boton actualizar y el codigo para evitar el error lo he puesto al inicio del codigo y tambien lo ha resuelto.
Espero que con esto pueda dar marcha a la aplicacion. Gracias Norberto
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Felix (74 intervenciones) el 13/05/2015 23:20:24
Una pregunta, ¿Porqué al poner el mismo código que inicialmente me diste no responde para el caso de el dato de ingresar la fecha en todos los registros?

1
2
3
4
5
6
Private Sub TxFch1_AfterUpdate()     'Para cambiar la fecha en todos los registros de la Tabla Asistencia campo Fch 1
DoCmd.RunCommand acCmdSaveRecord     'Para que no me produzca error
DoCmd.SetWarnings False          'Para que no me salga mensaje de confirmar cambios
DoCmd.RunSQL "UPDATE [Asistencia] SET Fch 1= " & Me.TxFch1       'Codigo para cambiar fecha a todos los registros
DoCmd.SetWarnings True    'Para que no me salga mensaje de confirmar cambios 
End Sub

Me sale error 3144 en tiempo de ejecución
error de sintaxis en la instrucción UPDATE

Se supone que debería actuar igual que en anterior caso, pero me encuentro conque al tratarse de las fechas no me responde. Que podrá ser??
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

hacer que dato ingresado en cuadro de texto se agregue en todos los registros existentes de un campo

Publicado por Norberto (753 intervenciones) el 18/05/2015 11:17:04
Hola de nuevo.

Si has hecho un copia-pega del código el fallo puede estar en SET Fch 1. Concretamente en el espacio en blanco. Si realmente lo lleva, enciérralo entre corchetes.

Eso te evitará el error pero el campo no se actualizará correctamente ya que en SQL las fechas son un poco p0rcu¡€r4s. Éstas deben de estar entre corchetes y en formato mes-día-año. Por tanto, para indicar una fecha en SQL que provenga de un control, debes de usar "... #" & Format(ControlFecha, "mm/dd/yy") & "#...".

Prueba a cambiar la línea por
1
DoCmd.RunSQL "UPDATE [Asistencia] SET [Fch 1] = #" & Format(Me.TxFch1, "mm/dd/yy") & "#"

Otra alternativa es definir una variable de tipo Long y asignarle el valor del cuadro de texto, de forma que la fecha se convierta en número, y le asginamos este valor así:

1
2
3
4
5
6
7
8
9
10
11
Private Sub txtLlenar2_Click()
    Dim mySQL As String, ValorFecha As Long
 
    Me.txtFecha.SetFocus
    If Not IsNull(Me.txtFecha) Then
        ValorFecha = Me.txtFecha
        mySQL = "UPDATE [Llenar las fechas por SQL] SET [Fecha 1] = " & ValorFecha
        DoCmd.RunSQL mySQL
 
    End If
End Sub

Un saludo,

Norberto.
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