Formulario con lista desplegable, y 2 campos de búsqueda de registros integrado

Buenas tardes,

REspecto a lo que ya me estuvo ayudando jusacasa (y le estoy muy agradecido), quería hacer un formulario en el que, a través de la tabla Filter, integrara varios métodos de búsqueda de mis registros:

  • Una lista desplegable donde pueda seleccionar el registro (que ya está hecho y funciona bien, gracias a jusacasa.
  • Un campo de texto para búsqueda por el nombre del edificio.
  • Un campo numérico para búsqueda por el código del edificio.

Y que en cualquiera de los 3 casos me arrojara los datos asociados el edificio.

El problema que me encuentro es que da error una vez he buscado en uno de los 3 campos, es decir, si ya he buscado un registro en uno de los 3 campos, me da error o simplemente no muestra nada si busco a través de otro método.

Por lo que creo, cada vez que he he buscado algo, debería poder “limpiar” los campos de búsqueda, lista desplegable, y no sé si eso implica que tb deban borrarse los campos de la tabla filter.

También he pensado en crear una tabla filter para cada tipo de búsqueda, pero creo que se cruzarían los datos y también daría error, porque el botón de “actualizar formulario” está sobre el formulario principal.

También he probado con un botón de restablecer datos formulario o deshacer entrada de datos, pero entonces tendría que poner un botón de limpiar por cada uno de lso formularios del FORM base. Vamos, que estoy perdido!!

(formulario “Actuaciones” en el siguiente archivo)

prueba obras.odb (34.0 KB)

Bueno, tener tres campos de búsqueda no es muy diferente de tener uno:

  • Cada campo de búsqueda tiene que tener un campo del mismo tipo en la tabla Filter
  • La consulta que muestra la tabla de datos tiene que tener, para cada campo de búsqueda o filtrado una cláusula igual que la cláusula WHERE de cada búsqueda individual, pero todas encadenadas en la sentencia WHERE de la consulta mediante AND

Para limpiar los campos de búsqueda, se necesita una macro. Una muy sencilla y que no utiliza demasiados artilugios, es decir ni bucles ni cosas de esas, aunque haya que escribir más, podría ser algo así:

Sub Limpiar(oEvento As Object )
	Dim oDoc As Object
	Dim oDrawpage As Object
	Dim oForm As Object
	Dim oForm2 As Object
	
	oDoc = thisComponent 'obtiene el documento actual
	oDrawpage = oDoc.drawpage 'y su página de dibujo (o como se llame en español)

	oForm  = oDrawpage.forms.getByName("Filtros") 'obtiene el formulario Filtros (los controles pertenecen a ese formulario)
	oform.getByName("txt1").Text = "" ' Limpia el cuadro de texto
	oform.getByName("txt1").Commit() 'y hace que el valor ya vaciado se guarde en el campo
	oform.getByName("txt2").Text = ""
	oform.getByName("txt2").Commit()
	oform.getByName("txt3").Text = ""
	oform.getByName("txt3").Commit()
	
	oForm.updateRow() 'Actualiza todos los campos del registro en la tabla

	'Actualizar el formulario principal para que vuelva amostrar todos los datos
	'(porque ahora todos los campos de Filter están vacíos)
	oForm2  = oDrawpage.forms.getByName("MainForm")
	oForm2.reload()
End Sub 

prueba obras (3).odb (44,5 KB)