No me calcula un campo en Access

Tengo un formulario para hacer presupuestos que estoy creando para un cliente. Ellos trabajan sobre presupuestos, y me han pedido que les diferencia cuatro tipos: aceptado, denegado, facturado y pendiente. A raíz de pedirme un botón para copiar un presupuesto, me ha tocado cambiar todo, pues antes lo hacía mediante filtros, y ahora me toca cambiar el origen del formulario para ir viendo cada uno de los tipos de presupuestos. Cuando es un presupuesto aceptado, se visibiliza el botón Depósito, y calcula cuándo debe dejar el cliente para aceptar el presupuesto. Sin embargo, por más vueltas que le doy, no consigo que funcione. Unas veces lo coge, otras no. Además de que el comportamiento es raro. Te he grabado un vídeo, donde creo que se verá mejor:

https://www.dropbox.com/s/sd3s4bs6bkuyoan/V%C3%ADdeo.mp4?dl=0 

¿Sabes por qué no me coge el Depósito? ¿Sabes por qué tiene ese comportamiento de pasar varias por la misma función?

1 Respuesta

Respuesta
2

Por qué no te coge el depósito, ni idea, imagino que se perderá entre tanta llamada entre procedimientos y funciones, pero no te podría decir seguro.

El por qué te pasa tantas veces por la función VerEstado, es simplemente porque así se lo marcas tú en el código:

En "AlSeleccionarUnEstado" primero cambias el origen de datos, luego haces un Requery y luego llamas a la función VerEstado (haces más cosas, pero céntrate en estas 3 acciones).

Con la primera acción, se ejecuta el evento "al activar registro" (Form_Current), y como ahí también tienes la función VerEstado, se ejecuta la primera vez (antes del msgbox de recuerdo), con la segunda acción (el Requery), se vuelve ejecutar "al activar registro" (2ª vez que te pasa por VerEstado), y luego llamas explícitamente a esa función con la tercera acción (y en consecuencia, 3ª vez que te pasa por la función)

Hay cosas que me resultan extrañas, sobre todo en la función ContarTiposDePresupuestos:

1º/ La función, que en principio te devolvería un número (por eso de contar) la defines como que devuelve un texto

2º/ En la SQL tratas el Código de Estado como texto, cuando entiendo que es un número...

3º/ ¿A qué viene ese Do Loop y el If que le sigue? Todo eso lo puedes hacer más rápido con:

ContarTiposDePresupuestos=rst.Recordcount

Y si ves que solo te devuelve 0 o 1 (si usas versiones antiguas a veces pasaba), puedes ponerlo como:

If rst.RecordCount>0 Then
  rst.Movelast
  ContarTiposDePresupuestos=rst.Recordcount
End If

o también

If Not (rst.BOF And rst.EOF) Then
    rst.MoveLast
    ContrTiposDePresupuesto=rst.RecordCount
End If

Muchas gracias. He borrado los dos eventos, porque ¿para qué tenerlo si ya lo hace? De todas formas, en esta base de datos tengo otro problema más gordo aún, y es que no me crea los registros utilizando una consulta de origen con el criterio de los presupuestos aceptados. Esta base de datos me está poniendo a prueba. Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas