¿Campo calculado en Access con varias condiciones?

Tengo una tabla en Access en la que quiero poner un campo calculado “precio” condicionado por cuatro campos “Festivo”, ”Roto”, ”Peso”, ”Pequeño”. Estos campos dan como resultado “Sí/No” menos peso que tiene varios resultados, “1, 2, 3, 4, 5, …, 10”.

Tengo un diagrama de flujo, ya que lo he intentado hacer con código C pero no se ponerlo en Access.

Lo subo para ver si alguien puede echarme una mano, (busco aprender como se hace, no me lo den hecho) y saber si se puede o no hacer esto.

Gracias.

1 respuesta

Respuesta
1

Tal como yo lo veo tienes dos formas de hacerlo:

1º/ Crear el campo calculado con la expresión en la propia consulta, usando funciones SiInm() anidadas para analizar y actuar en cada opción. Tiene un problema, lo más probable es que te salga una expresión demasiado larga y Access no te la admita, por lo que tendrías que recurrir a varios campos calculados "parciales" y luego a otro "definitivo" calculado sobre los parciales... y puede ser bastante lío.

2º/ Crear una función personalizada en un módulo y usarla para crear el campo calculado en la consulta.

A esta función le tendrás que pasar como parámetros los 4 campos que necesitas, y dentro de ella, mediante bloques If.. Then anidados ir actuando en cada caso.

La idea sería esto:

Public Function fncPrecio(Festivo As Boolean, Roto As Boolean, Peso as Integer, Pequeño As Boolean) As String
If Festivo=True Then  'Festivo es Sí
   If Roto=True  Then  'Roto es Sí
      If Peso <3 Then  'Peso es <3
         ...
      Else             'Peso es 3 o más
         fncPrecio="L"
      End If      
   Else                'Roto es No
      ....
   End If
Else                  'Festivo es No
....
End If
End Funtion

Luego en tu consulta el campo calculado lo creas como:

Precio:fncPrecio([Festivo];[Roto];[Peso];[Pequeño])

Un saludo


Hola, muchísimas gracias por tu respuesta Sveinbjorn El Rojo, supongo que eso es código VBA, sinceramente lo de crear módulos con código no lo he tocado, pero nunca es tarde para aprender. Voy a buscar manuales y a estudiar.

De nuevo muchísimas gracias.

Si puedes recomendarme algún manual te lo agradecería. 

Un saludo. 

Yo te recomendaría que ojeases los de Neckkito (http://siliconproject.com.ar/neckkito/ ). Yo empecé con ellos y mírame ahora, jejeje...

También los de Eduardo Olaz y de Fermí Vilá son buenos.

Y ya puestos a recomendar, estate atento a la web que tenemos Neckkito y yo (http://nksvaccessolutions.com/ ), pues pronto habrá novedades y no solo un foro de Access.

Un saludo.


Gracias, estaré atento a vuestra web, mientras tanto iré estudiando el curso que tiene Neckkito en la web. 

Un saludo.

Buenas.

El código ya lo tengo terminado, lo que me gustaría saber es como puedo poner el precio de un formulario en el que tengo los precios registrados. Este formulario no permite crear mas registros, solo modificar el valor de los campos.

Lo he intentado con 

Private Sub Form_Load()
Entradas.Auto.Currency = Precios.RotoFestivoPeso.Currency
end sub

Pero me da un error. 

Pongo un ejemplo de como tengo el código.

Private Sub Form_Load()

Private Sub Auto_LostFocus()

If Festivo = True Then 'Festivo es Sí
     If Roto = True Then 'Roto es Sí
           If Peso = True Then 'Peso es Sí
                       Entradas.Auto.Currency = Precios.RotoFestivoPeso.Currency
......

Gracias por todo

Un saludo.

Sinceramente, no me enteré de lo que pretendes, porque Entradas. Auto. Currency ni sé a que se refiere ni qué quieres hacer... pero si le quieres dar formato moneda a un campo, has de usar la función Format().

Hola, perdona si no me he explicado bien.

Te comento por pasos.

Tengo dos formularios, Entradas y Precios.

Entradas tengo el campo Auto, con formado moneda, el cual está calculado con el código.

Precios tengo los campos FRP, FRp,... con los precios A,B,..., Cada campo tiene un precio.

Lo que quiero es que una vez comprobadas las condiciones para el campo Auto, introducir el valor del campo correspondiente desde Precios. 

No se si me explico bien. 

Gracias

Si estás en el formulario Entradas, el código sería (suponiendo que el precio lo tienes en el campo RotoFestivoPeso):

Me.Auto= Format(Forms("Precios").RotoFestivoPeso,"Currency")

Gracias, el problema es que con ese código me sale el error "2450" diciendo que access no encuentra el formulario precios.

Si tengo abierto el formulario "precios" si que funciona, pero si esta cerrado me sale ese error, y ya no se si es porque tengo algo mal en el código o porque tiene que estar abierto si o si. 

Un saludo y gracias por la ayuda.

Me respondo a mi mismo.

No se si sera una solución buena, pero abriendo el formulario antes de consultar y cerrándolo después he podido solucionar el problema. 

Tiene un pequeño parpadeo, pero es indiferente.

Así seria como queda.

DoCmd.OpenForm "Precios"
Me.Auto = (Forms("Precios").RotoFestivoPeso)
DoCmd.Close acForm, "Precios"

Que te parece, es buena la solución?

Gracias por todo.

A ver, si tienes un formulario cerrado, obviamente no puedes coger un valor de un control de ese formulario y pasarlo a otro formulario...

La solución que pones es buena si te resuelve lo que quieres. Para evitar ese parpadeo, mira la ayuda del OpenForm, porque hay un método para abrir los formularios ocultos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas