Fecha en función del valor otro campo en formulario

Soy una usuaria de ACCESS con un nivel muy bajo. He hecho un access con 3 tablas (clientes, reservas y encargos), todas ellas relacionadas a traes del código cliente. En la tabla encargos tengo el campo estado y tengo tantos campo fechas como estados que tengo. Necesito que al cambiar el estado ( a través de un formulario) se actualice automáticamente el campo fecha que corresponda de la tabla encargos.
Estoy intentando un procedimiento de evento al actualizar en el campo estado, pero no funciona. Adjunto el código que he puesto:
Private Sub estat_petició_AfterUpdate()
If Encàrrecs.[estat_petició] = "demanat" Then
Update Encàrrecs.[data peticio prov] = Fecha()
Else
If estat_petició = "rebut" Then
Update Encàrrecs.[Data rebut] = Fecha()
Else
If [estat_petició] = reclamat Then
[data reclamat] = Fecha()
Else
If [estat_petició] = entregat Then
[data entregat] = Fecha()
End If
End Sub
Gracias
{"lat":36.0313317763319,"lng":2.8125}

1 Respuesta

Respuesta
1
No entiendo muy bien... ¿insertas un nuevo registro o modificas uno existente?
Me cuentas.
Hola Angeles,
Lo que hago es actualizar el estado de un registro existente.
Gracias
Yo lo haría con el método ejecutar sql de esta forma:
If estat_petició = "rebut" Then
DoCmd.RunSql "Update Encàrrecs Set [Data rebut] = Fecha()"
Me cuentas.
Hola Angeles,
No hay manera, he cambiado el código tal y como dijiste y no actualiza las fechas. Ya no se que más probar. Como he creado los campos con espacios en probado de variar y dejarlos con el espacio o incluir un "_" en el campo. ¿Crees qué puede ser este el problema?
Private Sub estat_petició_AfterUpdate()
If Encàrrecs.[estat_petició] = "demanat" Then
DoCmd.RunSQL "Update Encàrrecs Set [Data peticio prov] = Fecha()"
Else
If estat_petició = "rebut" Then
DoCmd.RunSQL "Update Encàrrecs Set [Data_rebut] = Fecha()"
Else
If [estat_petició] = reclamat Then
[data reclamat] = Fecha()
Else
If [estat_petició] = entregat Then
[data entregat] = Date
End If
End Sub
Gracias
¿Me puedes decir que son encârrecs y [estat_petició]? Me refiero a si son campos de la tabla, recordset, cuadros de texto del formulario... y como se llama la tabla y el campo que quieres actualizar. Quizás no me enteré bien.
?Encàrrecs es una tabla
? Son campos de la tabla Encàrrecs:
-estat petició
-data peticio prov
-data rebut
-data reclamat
-data entregat
Estos son algunos de los campos, pero son los que necesito que se actualicen cuando cambio de estado el campo "estat petició". Cuando cambio el estado del campo a través del formulario puedo ver como queda modificado en la tabla, sin embargo no se actualizan las fechas.
El formulario Encàrrecs apunta a la tabla Encàrrecs filtrando aquellos cuyo estado es "Entregat":
SELECT Encàrrecs.Id, Encàrrecs.codiclient, Encàrrecs.producte, Encàrrecs.diari, Encàrrecs.[data petició], Encàrrecs.import, Encàrrecs.[estat imp], Encàrrecs.cupó, Encàrrecs.Observacions, Encàrrecs.[estat petició], Encàrrecs.[data peticio prov], Encàrrecs.[data rebut], Encàrrecs.[data reclamat], IIf([Encàrrecs]![estat petició]="entregat",Date()," ") AS [data entregat]
FROM Encàrrecs
WHERE (((Encàrrecs.[estat petició]) Not Like "entregat"));
SELECT Encàrrecs.Id, Encàrrecs.codiclient, Encàrrecs.producte, Encàrrecs.diari, Encàrrecs.[data petició], Encàrrecs.import, Encàrrecs.[estat imp], Encàrrecs.cupó, Encàrrecs.Observacions, Encàrrecs.[estat petició], Encàrrecs.[data peticio prov], Encàrrecs.[data rebut], Encàrrecs.[data reclamat], IIf([Encàrrecs]![estat petició]="entregat",Date()," ") AS [data entregat]FROM EncàrrecsWHERE (((Encàrrecs.[estat petició]) Not Like "entregat"));
No se si al aplicar un filtro puede condicionar. Además el formulario esta dentro de otro formulario que son los clientes.
Por lo que entiendo Encárrecs es el nombre de la tabla no el del formulario y los cuadros de texto, cuadros combinados... en fin cualquier objeto del formulario los tienes que referir al formulario, no a la tabla
If Form![estat_petició].Value = "demanat" Then
siendo estat_petició el nombre del cuadro de texto
Hola Angeles,
Sigo con el problema, yo pensaba que residía en que no actualizaba la fecha pero el problema es que no reconoce la condición, cuando le pongo que compruebe el valor del campo del formulario "estat_petició" ( se llaman igual tanto en la tabla como en el formulario ) no entiende la condición, lo he comprobado poniendo que me devuelva un MsgBox
If Form![estat_petició].Value = "demanat" Then
MsgBox "demanat"
If Me.estat_petició.Value = "rebut" Then
MsgBox "rebut"
If Me.[estat petició] = "reclamat" Then
MsgBox "reclamat"
Como puedes ver estoy probando variaciones diversas, el campo con o sin espacio, el campo con o sin corchetes .etc. FRANCAMENTE ya no se que más hacer.
Siento mucho ser tan pesada. Muchas gracias
Joana
En vez de en la acción al cambiar, pon en la de al perder el enfoque y empieza el código con un Me. Refresh
No te preocupes porque esto se alargue, lo que tenemos que conseguir es que funcione.
Hola Angeles,
Por fin lo he resuelto, tenia varios problemas:
1.- Tenia varios if anidados y solo cerraba 1 de ellos.
2.- El subformulario se basaba en una consulta de una tabla que posteriormente había añadido los campos de las fechas pero no había actualizado la consulta del formulario.
3.- La función fecha() no funciona en mi access (supongo que es por una cuestión de idioma. He cambiado la función por Date y perfecto.
Muchas gracias por tu soporte y siento mucho lo pesada que he sido.
Adjunto el código que finalmente me ha funcionado:
Private Sub estat_petició_AfterUpdate()
Me.Refresh
If Me.estat_petició = "demanat" Then
Me.[data peticio prov].Value = Date
Else
If Me.estat_petició = "rebut" Then
Me.data_rebut.Value = Date
Else
If Me.estat_petició = "reclamat" Then
Me.[data reclamat].Value = Date
Else
If Me.estat_petició = "entregat" Then
Me.[data entregat].Value = Date
Else
MsgBox "no actualitzat"
End If
End If
End If
End If
End Sub
Me alegro que que lo hayas resuelto. Los If anidados te aconsejo que los pongas:
If Me.estat_petició = "demanat" Then
     Me.[data peticio prov].Value = Date
Else
     If Me.estat_petició = "rebut" Then
          Me.data_rebut.Value = Date
     Else
          If Me.estat_petició = "reclamat" Then
               Me.[data reclamat].Value = Date
          Else
               If Me.estat_petició = "entregat" Then
                    Me.[data entregat].Value = Date
               Else
                    MsgBox "no actualitzat"
               End If
          End If
     End If
End If
De esta forma de un vistazo ves si los tienes todos cerrados.
Las funciones en castellano funcionan en consultas, cuadros de texto... pero no en código, ahí las tienes que poner en inglés. De todas formas es conveniente ponerlas siempre en inglés y así no te complicas, ya que si access la necesita en castellano la cambia automáticamente, no así si es al contrario.
Bueno, si no tienes más consultas, por favor cierra la pregunta, ya que tengo muchas activas y me hago un lío.
Hasta otra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas