Búsqueda en formulario

Hola experto, tengo un formulario en el que he incluido un combo independiente (cmbBuscar), un campo independiente (txtBuscar) y un botón de comando (cmdBuscar).
La lista del combo está limitada a los campos del formulario, en el campo introduzco los caracteres que deseo buscar y lo ejecuto con el botón.
El código que tiene el botón de comando es el siguiente:
Private Sub CmdBuscar_Click()
On Error GoTo Err_CmdBuscar_Click
Dim sql As String
Dim busq As String
If txtBuscar = Null Then
Me.RecordSource = "Propietarios"
Me.Requery
Me.Recordset.MoveLast
End If
If txtBuscar <> "" Then
busq = "Propietarios."
busq = busq & [Forms]![Propietarios]![cmbBuscar]
sql = "SELECT Propietarios.DNI, Propietarios.Titular, Propietarios.Nº_Cta, Propietarios.Telefono, Propietarios.Movil, Propietarios.D_Notificacion, Propietarios.CP_Notificacion, Propietarios.L_Notificacion, Propietarios.P_Notificacion, Propietarios.Email, [Propietarios]![¿Debe?], Propietarios.Comunica, Propietarios.Otro_Dom, Propietarios.Estado FROM Propietarios WHERE ((("
sql = sql & busq
sql = sql & ") Like '*' & [Forms]![Propietarios]![txtBuscar] & '*'));"
Me.RecordSource = sql
Me.Requery
Me.Recordset.MoveLast
End If
txtBuscar = Null
cmbBuscar = Null
Exit_CmdBuscar_Click:
Exit Sub
Err_CmdBuscar_Click:
MsgBox Err.Description
Resume Exit_CmdBuscar_Click
End Sub
El caso es que cuando ejecuto la primera búsqueda dejando los campos de criterio vacíos me devuelve bien el resultado (143 registros). En la siguiente búsqueda le digo en el combo que busque por el campo Titular y en el campo texto GARR y también me lo hace correcto (5 registros). Sin embargo si realizo una nueva consulta dejando los campos de criterio de búsqueda vacíos me sigue manteniendo los registros de la búsqueda anterior (5) cuando deberían ser 143 como hace en la primera búsqueda.
¿Hay algo en el código que esté haciendo mal? O ¿Tengo qué añadirle algo que no sé?
Gracias

4 respuestas

Respuesta
1
Que ganas tenéis de complicaos la vida, ¿por qué no usas el filtro por formulario?, pones lo que quieres buscar en el campo o campos y le das al embudo, en fin.
¿Has probado a poner 'elses' en los if ;-)?.
Private Sub CmdBuscar_Click()
On Error GoTo Err_CmdBuscar_Click
Dim sql As String ,busq As String
If txtBuscar <> "" Then 
 sql = "Select * From Propietarios Where (" & me.[cmbBuscar] & " Like '*' & me.[txtBuscar] & '*');"
 Me.RecordSource = sql
else
 Me.RecordSource = "Propietarios"
End If
Me.Requery
Me.Recordset.MoveLast
txtBuscar = Null
cmbBuscar = Null
Exit_CmdBuscar_Click:
Exit Sub
Err_CmdBuscar_Click:
MsgBox Err.Description
Resume Exit_CmdBuscar_Click
End Sub
Respuesta
1
Lo que pasa es que access en las memorias temporales guarda las consulta o elementos trabajados, lo que debes de hacer es un método refresh, lo que hace este es refrescar y vaciar las temporales; aplícalo en el botón de búsqueda y en la lista desplegable, es sencillo el código es así:
Me. Refresh
Respuesta
1
Lo primero arregla esto
If txtBuscar <> "" Then
se ve mas lindo asi
if not isnull(me![TxtBuscar]) then
Y pon después de me. Requery me. Refresh así te devolverá todos los registros a como si abrieras el form de nuevo
Si no te funciona me avisas
Respuesta
Debes hacer que después de la búsqueda, o después de seleccionar el combo, "actualice".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas