Problemas consulta actualización access con Dsum

Quiero actualizar un campo de una tabla el campo se llama "Horas" y la tabla TVoluntarios.

Quisiera si alguien me pudiera corregir una cosa que me falla.

Tengo un formulario basado en una tabla con los siguientes campos(id, idServ, Nombre, Puesto, Horas). El campo nombre es un combo que toma los valores de la tabla TVoluntarios (en la sql elegí el id, nombre de esa tabla) y almacena el nombre.

Pues en el evento después de actualizar del campo Horas he puesto el siguiente código:

Private Sub Horas_AfterUpdate()
    Dim misHoras As Long
    Dim miSql As String
    DoCmd.RunCommand acCmdSaveRecord
    misHoras = DSum("Horas", "TVoluntarios", "Nombre='" & Me.Nombre & "'")
    miSql = "UPDATE TVoluntarios SET Horas=" & misHoras & " WHERE nombre='" & Me.Nombre & "'"
    DoCmd.RunSQL miSql
End Sub

 Pero no me hace nada ni me actualiza las horas, es más no me pone ni las primeras, ni me da ningun tipo de error.

1 Respuesta

Respuesta
2

Lo único que se me ocurre es que compruebes, en la ventana de propiedades del campo Horas, que efectivamente tienes el evento "Después de actualizar" enlazado con el módulo VBA. Si en el evento tienes [Procedimiento de evento] es que está enlazado correctamente, y si no, ese el el fallo.

Si esta así:

Pues entonces presumo que el error lo tienes en esta linea que comentas:

El campo nombre es un combo que toma los valores de la tabla TVoluntarios (en la sql elegí el id, nombre de esa tabla) y almacena el nombre.

Si cogiste el id y el nombre, y no lo cambiaste en las propiedades del cuadro combinado, el combo seguro que te guarda el id y no el nombre, y por eso no te actualiza la tabla (porque no hay ningún nombre=1, por ejemplo), y no te da ningún error, porque el código es correcto.

Quizás me explique mal, ese campo lo convertí en cbo y en el origen de la fila hice esto:

SELECT TVoluntarios.Id, TVoluntarios.Nombre FROM TVoluntarios ORDER BY TVoluntarios.Nombre;  

Numero de columnas 2

ancho:0cm;3cm

Columna dependiente:2

Y comprobé antes de escribiros si me guardaba el nombre. ¿Qué este subForm este basado en otra tabla no influye para la actualización no?

Quizás me explique yo mal, los campos del formulario están basados en una tabla llamada TServVoluntarios (id, idServ, nombre, puesto Horas) en campo Nombre lo cambie a un cbo cuyo origen de la fila:

SELECT TVoluntarios.Id, TVoluntarios.Nombre FROM TVoluntarios ORDER BY TVoluntarios.Nombre;

Numero de columnas:2

Ancho: 0cm;3cm

Columna dependiente:2

El campo que quiero que actualice se llama Horas y es el de TVoluntarios y lo que tengo en común en ambos sitios es el nombre.

Al correo me llegó que escribiste pero aquí no la veo... :O

Te respondo igualmente:

Pues no veo dónde está el problema, porque a estas alturas, imagino que los nombres que pones en el código son los correctos...

Y añado, lo que haces con el combo es una "tontería", si no vas a usar el ID, que sería lo lógico según se te explicó en más de una ocasión, ¿para qué lo coges en la SQL del combo?

He probado de todo con ese campo incluso dejándolo como txt y escribiendo yo, con solo los nombre en la sql y nada y sigo con ello je je

He probado de todo esta tarde ya combo sin combo, con id sin id incluso cambie ahora el código:

Private Sub Horas_AfterUpdate()
    Dim misHoras As Long
    Dim miSql As String
    DoCmd.RunCommand acCmdSaveRecord
    misHoras = Nz(DSum("horas", "TVoluntarios", "Nombre='" & Me.Nombre & "'"), 0)
    miSql = "UPDATE TVoluntarios SET horas=" & misHoras & " WHERE Nombre='" & Me.Nombre & "'"
    DoCmd.RunSQL miSql
End Sub

No habra que poner alguna referencia para esto no?

Se que estas muy liado pero para cuando tengas 5 min ha ver si esncuentras algo esta solo esto no hay más en la bd.

http://www.filebig.net/files/eihHGmUYr4 

Gracias que te mareo siempre

La SQL sí que actualiza. El "problema" es que con el DSum no sumas nada (la tabla TVoluntarios tiene en blanco todos los campos horas) y por tanto la SQL te pone o en el registro correspondiente al nombre en la tabla TVoluntarios.

Pobre a ponerlo con 0 como valor predeterminado y tampoco me hacia nada. ¿Y cuál puede ser la solución?

Tener valores en la tabla para que el DSum devuelva algo que no sea 0...

De todos modos fíjate que lo que intentas hacer no tiene sentido:

1º/ Registras una hora en el formulario sobre la tabla TServVoluntarios

2º/ Al actualizar esa hora, sumas las horas de esa persona de la tabla TVoluntarios

3º/ Luego actualizas TVoluntarios con esa suma.?

Después de estar unas buenas horas de esta tarde (unas cuantas lo juro) para solucionar esto, la solución la tenia muchísimo más simple y fácil.

Con TServVolunatarios tengo todos los registro y el nombre así que con una consulta de totales y agrupando por suma me da las horas totales de cada uno.

Pero me alegra saber que supe hacer el código más o menos bien.

Muchas gracias por todo de verdad.

Un saludo

A mandar... XD

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas