Control de error en una búsqueda en Access2013

Quisiera me pudieran ayudar con error que se me genera en mi data... Tengo un formulario en donde genero una búsqueda, funciona bien pero si el registro no coincide con el RecordSource al momento de escribirlo me arroja el siguiente error...

Trato de agregarle un control de error, pero no logro llegar a buen termino, o no hace nada, o me cierra el formulario o simplemente se queda en un loop y tengo que cerrarlo a la fuerza

Esta es mi rutina que uso:

Private Sub Tex_Busqueda1_Change()
Dim SQL As String
On Error GoTo Fin
        SQL = "SELECT * FROM Tabla_Clientes"
        SQL = SQL & " WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
        Form_Listado_Clientes.Form.RecordSource = SQL
        Me.Tex_Busqueda1.SetFocus
        Me.Tex_Busqueda1.SelStart = 100
Fin:
End Sub

Esto lo repito para tres campos diferentes de búsqueda, dentro de la misma tabla con 3 registros diferentes

1 Respuesta

Respuesta
2

Como no dices en qué linea te marca el error, yo te diría que primero probases así:

Private Sub Tex_Busqueda1_Change()
   Me.RecordSource = "SELECT * FROM Tabla_Clientes WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
   Me.RecordSource = SQL
   Me.Tex_Busqueda1.SetFocus
   Me.Tex_Busqueda1.SelStart = 100
End Sub

Si así no te funciona, ponle este control de errores:

Private Sub Tex_Busqueda1_Change()
On error resume next
Me.RecordSource = "SELECT * FROM Tabla_Clientes WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
Me.RecordSource = SQL
Me.Tex_Busqueda1.SetFocus
Me.Tex_Busqueda1.SelStart = 100
End Sub

Y si así tampoco te va, este otro:

Private Sub Tex_Busqueda1_Change()
On error goto sol_err
   Me.RecordSource = "SELECT * FROM Tabla_Clientes WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
   Me.RecordSource = SQL
   Me.Tex_Busqueda1.SetFocus
   Me.Tex_Busqueda1.SelStart = 100
Salida:
   Exit sub
sol_err:
  msgbox "Se ha producido el error " & Err.Number & ": " & Err.description
End Sub

Pero sería bueno saber dónde se produce el error para actuar específicamente sobre esa linea

Hola Sveinbjorn El Rojo... gracias por responder... pido disculpa debí agregar lo que mencionas y e aquí..

Trato de limpiar el registro con otro código que tengo y me el error se presenta así

No eh probado lo que enviaste, esperare a tu respuesta... caso contrario realizare lo propuesto

Acabo de hacer una prueba y cualquiera de los códigos que te propuse funcionan, pero acabo de ver que hay un pequeño error en todos ellos, por culpa del copia-pega... En todas las propuestas tienes que eliminar la línea:

Me.Recordsource=SQL

Es decir, que te quedarían así los códigos:

Private Sub Tex_Busqueda1_Change()
   Me.RecordSource = "SELECT * FROM Tabla_Clientes WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
   Me.Tex_Busqueda1.SetFocus
   Me.Tex_Busqueda1.SelStart = 100
End Sub
Private Sub Tex_Busqueda1_Change()
On error resume next
Me.RecordSource = "SELECT * FROM Tabla_Clientes WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
Me.Tex_Busqueda1.SetFocus
Me.Tex_Busqueda1.SelStart = 100
End Sub
Private Sub Tex_Busqueda1_Change()
On error goto sol_err
   Me.RecordSource = "SELECT * FROM Tabla_Clientes WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
   Me.Tex_Busqueda1.SetFocus
   Me.Tex_Busqueda1.SelStart = 100
Salida:
   Exit sub
sol_err:
  msgbox "Se ha producido el error " & Err.Number & ": " & Err.description
End Sub

Estimado Sveinbjorn El Rojo... realise pruebas con los comando que me envio y con la opción 3

On error goto sol_err

 me envía este registro de error

 con los otros códigos no hace nada, me deja con el formulario en blanco y no pudo borrar nada para volver a los registros iniciales...

Hay algo que no me estás contando, (quizás por desconocimiento) de tu BD que hace que el código no te funcione. Porque tal y como te propuse, en un formulario "normal", no tendría ya por qué aparecer ningún error con esos códigos. Te dejo un mini-ejemplo para que lo compruebes:

http://www.filebig.net/files/PvcYWnzGRR 

En el archivo te van las 3 opciones que te ofrecía, y verás que funcionan correctamente.

Si quieres, sube una copia de tu BD, con la tabla y formulario implicado, y con un par de registros inventados y le echo un ojo a ver qué pasa.

Ah!, Se me olvidaba mencionarte una cosa: me parece que no tienes muy claro cómo funciona un control de errores.

Te explico un poco:

Un control de errores del tipo On error goto..., sirve para actuar sobre uno o varios errores que se puedan producir en la ejecución del código. Una de las formas de lidiar con esos errores (y que es la que te puse en el ejemplo 3), es simplemente informar del error (que es lo que hace el código, te muestra el número y descripción del error), pero se podrían hacer otras cosas...

Un control del tipo On error resume next, simplemente ignora el error y sigue con el código como si nada, pero hay que tener cuidado al usarlo, porque no siempre es la mejor opción...

Si quieres profundizar un poco más, puedes ver las últimas páginas del capítulo 7 de mi curso de Access: http://neckkito.xyz/nck/index.php/manuales/271-curso-completo-de-access-by-sveinbjorn

Estimado Sveinbjorn El Rojo... me disculpo... debí ser mas claro en el uso de mi BD, la cual estoy trabajando con formularios navegables y me eh dado cuenta que no funcionan de igual forma que solo un formulario simple y no eh podido encontrar mucha información, lo que me a generado aprender sobre la marcha. En cuanto al control de errores es un punto que no eh podido comprender mucho, al final utilice lo que indicaste y me resulta, pero no se como agregarle un mensaje, me limpie todo y me permita hacer todo de nuevo...

Private Sub Tex_Busqueda1_Change()
Dim SQL As String
On Error Resume Next
SQL = "SELECT * FROM Tabla_Clientes"
SQL = SQL & " WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
Form_Listado_Clientes.Form.RecordSource = SQL
Me.Tex_Busqueda1.SetFocus
Me.Tex_Busqueda1.SelStart = 100
End Sub

Reutilice mi botón limpiar con este comando...

Private Sub Limpia1_Click()
On Error Resume Next
Me.Tex_Busqueda1 = ""
Me.Tex_Busqueda1.SetFocus
Dim SQL As String
        SQL = "SELECT * FROM Tabla_Clientes"
        SQL = SQL & " WHERE Rut Like '*" & Me.Tex_Busqueda1.Text & "*'"
        Form_Listado_Clientes.Form.RecordSource = SQL
        Me.Tex_Busqueda1.SetFocus
        Me.Tex_Busqueda1.SelStart = 100
End Sub

Y así logro que me ejecute limpiar y buscar de nuevo, sin errores...

Gracias por tu ayuda...

Acabo de hacer la prueba en un formulario de navegación, y los códigos propuestos siguen funcionando sin problemas... http://www.filebig.net/files/H4tWeadgqg

En cuanto a tus códigos, usar on error resume next no siempre es la mejor opción. Además, si lo usas así, no le puedes poner ningún mensaje, el código simplemente "salta" la linea que da el error y continúa en la siguiente. Si ésta da error, la vuelve a "saltar" y pasa a la siguiente, y así hasta el final.

Con tu código, probablemente la mitad de las acciones no las ejecute.

Y ¿no te parece un poco extraño usar el mismo código para dos cosas totalmente distintas y que según tú, funcione?

¡Gracias! Sveinbjorn El Rojo... ahora me funciono perfecto, re hice el formulario y quedo OK... Estaré siguiendo tus proyectos para aprender más de Access...

Muchas gracias por tu tiempo y ayuda...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas