Como actualizar el valor de un registro existente en una tabla de microsoft access

Tengo una tabla llamada Ordenadores con varios campos (IdOrdenador, FechaAlta, FechaBaja, IdUsuario...).

Tambien tengo un formulario llamado Ordenador-SubFormNotas donde gestiono todas las incidencias y comentarios que tiene un ordenador concreto. Este formulario contiene los campos IdOrdenador, FechaNota, IdTipoNota, IdUsuario y Nota

Me gustaría que al añadir o modificar un nuevo registro desde este formulario, si el IdTipoNota =4, se actualice en la tabla Ordenadores, donde el IdOrdenador coincida con el del ordenador que estoy viendo, el valor del campo FechaBaja con el mismo que aparece en FechaNota.

Me da igual el procedimiento para conseguirlo: una macro o por VBA

He intentado hacerlo con un procedimiento en Visual Basic, pero no me funciona y no sé donde está el error de la consulta SQL. La verdad es que no tengo muchos conocimientos el VBA, así que agradecería cualquier ayuda. Muchas Gracias

Private Sub Form_AfterUpdate()
If IdTipoNota = 4 Then
CurrentDb.Execute " UPDATE Ordenadores SET FechaBaja = #" & Me.FechaNota & "# WHERE Ordenadores.IdOrdenador = '" & Me.IdOrdenador & "'"
End If
End Sub

2 respuestas

Respuesta
2

En principio la instrucción la tienes bien. La única duda que tengo es si IdOrdenador es numérico o texto. Si es texto lo tienes bien. Si por el contrario fuera numérico tendrías que ponerlo como

Docmd. Setwarnings false ( es para que no aparezca la ventanita de "Va a actualizar...")

if.... then

docmd.runsql"update ordenadores set fecha.......where idordenador= " & me.idordenador & "")

Julián te agradezco muchísimo tu rápida respuesta.

Efectivamente IdOrdenador es un campo clave autonumérico, así que he hecho los cambios que me dices, pero al ponerlo en práctica aparece "se ha producido el error 3464 en el tiempo de ejecución. No coinciden los tipos de datos en la expresión de criterios".

Si pulso el botón "depurar" y sitúo el puntero sobre ambas variables, se muestran correctamente la fecha y el número de idOrdenador.

He verificado que en las tablas está el formato fecha y que en el formulario también está elegido el formato fecha corta para ese campo.

Pues no te puedo decir porqué, habría que verlo porque, si tengo la tabla Pedidos

Fíjate en la fecha del IdPedido=6

Y tengo un formulario cualquiera, con un cuadro de texto llamado IdLoQueSea donde escribo un número cualquiera, en este caso un 6, y un cuadro de texo OtraFecha donde pongo una( les he puesto nombres distintos para que veas que da igual como se llamen, lo que si tienen que ser es de datos compatibles, número, con número, texto, con texto, fecha con fecha, etc.)

Lo he puesto en el evento Al hacer clic de un botón, pero se puede poner en cualquier evento. Si pulso el botón

Le ha cambiado la fecha. Y la instrucción es la que te decía.

Private Sub Comando57_Click()
DoCmd.RunSQL "update pedidos set fechapedido=#" & Me.OtraFecha & "# where idpedido=" & Me.IdLoQueSea & ""
End Sub

Si quieres, repito, si quieres, haz una copia vacía de la tabla y el formulario y me los mandas a [email protected] y le echo un vistazo.

Si lo haces, en el asunto del mensaje pon tu alias Nacho, ya que si no sé quien me escribe ni los abro.

¡Muchas gracias Julián de corazón! Da gusto encontrar a gente con tanta predisposición para ayudar a los demás. 

Al final lo he resuelto usando el código que propone Jacinto y en el que usa Format(Me.FechaNota, "mm/dd/yyyy") para darle formato. Yo pensaba que con las almohadillas era suficiente y en tu ejemplo se confirma, pero por lo que se ve en mi caso no. Seguro que me falta algo por poner correctamente y con este código se corrige.

Gracias de nuevo!

Respuesta
1

Nacho: Ampliando un poco lo que te comenta Julian (un saludo), te comento lo siguiente>>

1.- Si usas el CurrentDB. Execute no hace falta el Previo de >> DoCmd. SetWarnings Faalse

Si es recomendable para evitar el Mensaje si usas el DoCmd.RunSQL...

En cuanto al Evento a Programar yo lo haría en el FechaNota_AfterUpdate() de modo que quedaría:

A.- Si tu IdOrdenador es de tipo Número.

Private Sub FechaNota_AfterUpdate()
If IdTipoNota = 4 Then
    CurrentDb.Execute "UPDATE Ordenadores SET FechaBaja = #" & Format(Me.FechaNota, "mm/dd/yyyy") & "#" & " WHERE IdOrdenador = " & Me.IdOrdenador, dbFailOnError
End If
End Sub

B.- Si tu IdOrdenador es de tipo Texto

Private Sub FechaNota_AfterUpdate()
If IdTipoNota = 4 Then
    CurrentDb.Execute "UPDATE Ordenadores SET FechaBaja = #" & Format(Me.FechaNota, "mm/dd/yyyy") & "#" & " WHERE IdOrdenador = '" & Me.Ordenador & "'", dbFailOnError
End If
End Sub

Mis saludos a los dos >> JTJ

¡Mil gracias Jacito! 

efectivamente con tu código funciona perfectamente y se soluciona el mensaje de error que me daba con Julián.

Además tu sugerencia de escribir el código en FechaNota_AfterUpdate() me parece muy buena idea.

Muchísimas gracias a ambos por echarme una mano

La pregunta no admite más respuestas

Más respuestas relacionadas