Formulario de búsqueda: verificar si está o no

Os escribo para consultaros si es posible crear un formulario de búsqueda de tal manera que busque si en un tabla un material está en stock (sí/no), pero que primeramente verifique si ese material está en la tabla (aquí es donde mi lógica se pierde).

1 Respuesta

Respuesta
3

Lo puedes hacer de mil formas. Supongamos que en un cuadro de texto escribes el nombre del producto

Puedes poner en sus propiedades-eventos-antes de actualizar

If nz(dcount("*","nombredelatabla","producto='" & me.nombrecuadrotexto & "'"))>=1 then

msgbox"Ese producto existe",vbokonly","Que lo sepas"

else

Msgbox"Ese producto no existe", vbokonly,"Otra vez será"

Docmd. Cancelevent

end if

Si pudieras concretar algo más

Vale:

Primero, gracias por la pronta respuesta. Lo veo de la siguiente manera:

a) Primero se debería verificar que el producto existe (cada producto tiene un código):

- Si está en el listado, debería verificar si tiene stock (>0), de tal manera que diga Sí o No.

- Si no está listado, un mensaje como "Falta entrar producto", por ejemplo.

Estaría bien entrar la búsqueda en un cuadro de texto (por el nombre, por ejemplo), o desplegable, de tal manera que en otro cuadro de texto te indique el mensaje final.

:)?

Vamos a suponer que el código del producto lo eliges de un combinado, en que en el origen de la fila pone, más o menos,

Select codigo from productos group by codigo;

Y que el combinado se llama, por ejemplo, BuscarCodigo. En sus propiedades-eventos-Después de actualizar puedes poner

If nz(dcount("*","productos","codigo='" & me.buscarcodigo & "'"))=0 then

Msgbox"Ese producto no existe", vbokonly,"¡¡ Busca otro !!"

Docmd. Cancelevent

elseif dcount("*","productos","codigo='" & me.buscarcodigo & "' and stock>0") then

msgbox"Enhorabuena, el producto existe y si hay stock",vbokonly,"¡¡ Que suerte !!"

elseif dcount("*","productos","codigo='" & me.buscarcodigo & "' and stock=0") then

Msgbox"Joer, que mala suerte. El producto existe, pero no hay stock", vbokonly,"Otra vez será"

Docmd. Cancelevent

end if

Me ha funcionado a la perfección: solamente falta si el campo no tiene datos, ¿qué me aconsejas en ese caso? Por ejemplo, sería añadir la línea de tal manera que dijera "Falta actualizar stock".

Saludos.

Si en el campo código no hay datos, para eso le estás diciendo lo de NZ, que transforma los nulos en ceros. De todas formas, ¿podrías poner una imagen?

Buen día!

No te comprendo con lo de la imagen :S

Una imagen del formulario

https://www.imagenes-temporales.com/imagen/NnO2p/ 

Algo falla

Es más sencillo, con el formulario abierto pulsa Print Screen o Impr Pant. Luego abres el Paint y pulsas Pegar, la recortas y la guardas. Luego sól, aquí en todoexpertos sólo tienes que pulsar

Supongamos que tengo una tabla Productos

En un formulario tengo un combinado llamado Buscar, en el que en su origen de la fila tengo puesto

SELECT CodProducto FROM Productos GROUP BY CodProducto;

Voy a escribir un CodProducto que no existe

Cuando pulso Enter

Ahora voy a elegir Limones, que si existe pero que no tiene Stock

y me sale

Y si elijo algún producto que si exista y tenga stock

El código del evento Antes de actualizar del combinado Buscar es

Private Sub Buscar_BeforeUpdate(Cancel As Integer)
If Nz(DCount("*", "productos", "codproducto='" & Me.Buscar & "'")) = 0 Then
MsgBox "Lo siento pero ese producto no existe", vbOKOnly + vbInformation, "Sigue intentando"
DoCmd.CancelEvent
ElseIf IsNull(DLookup("stock", "productos", "codproducto='" & Me.Buscar & "'")) Then
MsgBox "Chico, que mala suerte, el producto existe pero no tiene stock", vbOKOnly, "Otra vez será"
DoCmd.CancelEvent
Else
MsgBox "Enhorabuena, el producto existe y tiene stock", vbOKOnly, "Por fin has acertado"
End If
End Sub

De todas formas, es una opinión, si el combinado tiene su origen de la fila en la tabla Productos, si los despliegas y no está ese valor, ¿para qué escribir?, no existe y punto. Incluso se le puede decir que sólo muestre aquellos productos que SÍ tengan stock. Por otro lado, no haría falta tanto código, pues en los combinados, en sus propiedades-Datos se le puede decir Limitar a la lista Sí y combinarlo con el evento Al no estar en lista.

Genio! Muchas gracias!

Una última: si quisiera cambiar tamaño de letra, color... en los mensajes, ¿cómo debería proceder? Por ejemplo, si es "Sí" que aparezca un verde bonito. Si es "No", un rojo grande y llamativo.

Que yo sepa, en los mensajes "prediseñados" no puedes, pero puedes sustituir el mensaje con un formulario. Por ejemplo, en el formulario de la imagen

Si pulso el botón

Al ser un formulario le puedes dar el formato que quieras, al texto, imágenes, fondo, etc.

¿Y directamente en un cuadro de texto se podría?

¿Te refieres a que el mensaje te aparezca en un cuadro de texto? Poca versatilidad tienen. Están pensados para poner o mostrar datos.

Por ejemplo, voy a escribir un país que no está

Cuando pulso enter

Mierda, he pulsado sin querer Enviar. Está hecho con una imagen y un botón de comando.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas