Campo de búsqueda en formulario

Los expertos, ante todo agradeceros vuestra colaboración y vuestra ayuda a nosotros los novatos en esto.
Mi pregunta es la siguiente:
Tengo un formulario para introducir datos con los siguientes campos IdRFQ, Descripción, Año, IdCliente, todos ellos de la tabla RFQ. El campo IdCliente está unido a la tabla_Clientes de la siguiente manera:
SELECT CLIENTES.IdCliente, CLIENTES.COMPAÑÍA FROM CLIENTES ORDER BY CLIENTES.[COMPAÑÍA];
Tod funciona perfectamente y se vuelcan los a la tabla correspondiente y cuando llego al campo IdCliente abro un desplegable del cual puedo elegir el cliente correspondiente y si este no está en la lista tengo la opción de abrir el formulario CLIENTES y crear ese nuevo cliente, que instantáneamente se me actualiza.
El problema es que la lista de clientes es interminable y a veces tardo mucho en buscar el cliente correspondiente, o busco no por el nombre completo sino sólo por una parte, por lo que no lo encuentro y acabo duplicando ese cliente.
Mi intención es que en ese campo me permita escribir alguna parte del nombre del cliente y la lista quede reducida a todos aquellos clientes que contengan esa parte, por ejemplo, si al teclear "Jua" aparezcan todos los clientes que en su nombre completo contengan esas letras, es decir, que acote la búsqueda y no todos los clientes de la tabla. No sé que estoy haciendo mal, pues he probado varias cosas y sólo consigo o que el desplegable se quede en blanco o que me aparezca el IdCliente en lugar del nombre de este.
Debe ser alguna instrucción con LIKE, pero no sé cómo expresarlo, dónde ni cómo.
Por otro lado, también necesitaría algún consejo para crear una instrucción para que si por error me dejo en blanco el campo Año me salte un mensaje "El campo año está vacio_ Debe rellenarlo" y no me deje salir del formulario o grabar ese registro hasta que no se haya completado, pero en la tabla RFQ no quiero que este campo sea obligatorio. También tengo alguna idea de como hacerlo, pero no mucha. Debe ser algo como esto:
If Año_Vacio then
Msgbox "El campo año está vacio_ Debe rellenarlo"
Pero no consigo que me funcione.

1 respuesta

Respuesta
1
Lo que suelo hacer yo en el evento doble click del desplegable, es mostrar un inputbox pidiendo el texto a buscar.
Luego cambio el rowsource de la lista desplegable a una consulta pero filtrada con like por el texto escrito en el inputbox, más o menos quedarías, solo tendrías que adecuarlo al nombre de tu combo box y la consulta a la consulta desde donde recoges los datos para el desplegable.
Private Sub Combo_DblClick(Cancel As Integer)
Buscar = InputBox("Introduzca filtro")
Combo.RowSource = "Select id, texto from tabla1 where texto like '*" & Buscar & "*';"
Combo.Requery
End Sub
Este código carga de nuevo la lista pero con el origen de fila que hemos cambiado y lo recargamos para que muestre los nuevos resultados.
A tu segunda pregunta es facil, tienes que añadir este codigo antes de guardar los datos.
If isnull(Año) or Año = "" then
Msgbox "El año no puede estar en blanco"
ExitSub
end if
Hola, muchas gracias ante todo por tu rápida respuesta. He hecho lo que me has comentado con el siguiente texto, pero me da un error: nº error 424 en tiempo de ejecución: Se requiere objeto. Las modificaciones que he realizado son las siguientes. Dime por favor, dónde he cometido el error. Muchas gracias de nuevo por tu ayuda
Private Sub IdCliente_DblClick(Cancel As Integer)
Buscar = InputBox("Introduzca filtro")
Combo.RowSource = "Select IdCliente,COMPAÑÍA from CLIENTES where COMPAÑÍA like '*" & Buscar & "*';"
Combo.Requery

En cuanto a mi segunda pregunta, mil gracias, funciona estupendamente, pero le he tenido que quitar ExitSub. Sin esto funciona a la perfección.
Te faltaba cambiar el nombre de "Combo" por el de "IdCliente", ahora te debería funcionar
Private Sub IdCliente_DblClick(Cancel As Integer)
Buscar = InputBox("Introduzca filtro")
IdCliente.RowSource = "Select IdCliente,COMPAÑÍA from CLIENTES where COMPAÑÍA like '*" & Buscar & "*';"
IdCliente. Requery
Ya está, muchas gracias, pero ahora si no encuentra un cliente con ese nombre no me dice que éste no está en lista y que si quiero incluirlo en esta, que antes sí lo hacía.
¿Dónde me he vuelto a equivocar?
No te has equivocado. Simplemente hay que comprobar si existen clientes.
'### Inicio Codigo ###
Buscar = InputBox("Introduzca filtro")
set rst = currentdb.openrecordset("Select IdCliente,COMPAÑÍA from CLIENTES where COMPAÑÍA like '*" & Buscar & "*';")
if rst.eof and rst.bof then 'Si no hay ningun registro
    resp = MsgBox ("No Existen clientes con este criterio, ¿Desea agregar un nuevo Cliente?",vbYesNo)
    if resp = VbNo then 'Si selecciona que no
Msgbox "intente utilizar otro filtro"
exitsub
else
DoCmd.OpenForm "ElNombreDeMiFormulario"
end if
else
IdCliente.RowSource = "Select IdCliente,COMPAÑÍA from CLIENTES where COMPAÑÍA like '*" & Buscar & "*';"
IdCliente.Requery
end if
rst.Close
'### Fin Codigo ###

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas