Visual Basic.NET - Error al hacer una búsqueda según se teclea

 
Vista:
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Miguel (281 intervenciones) el 03/02/2021 19:45:32
Estoy haciendo una búsqueda para DNI el cual le tengo con el formato "99999999 A". El caso que cuando empiezo hacer la búsqueda tecleo un número en el inicio de la misma y busca correctamente pero cuando tecleo el segundo valor me da el mensaje del error siguiente "No hay un Nif que contenga este carácter". Sin embargo cuando hago la búsqueda en cadenas de textos me hace la búsqueda bien.
Me puede alguien aclarar porque se produce el error.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Phil Rob (1546 intervenciones) el 05/02/2021 22:58:02
Hola Miguel,
Envía el procedimiento que hace esta buscada para mejor comprender el problema. Miraré mañana ...
Buena noche :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Miguel (281 intervenciones) el 05/02/2021 23:39:58
Bonjour Fhil, je vous l'envoie mais c'est de la programmation nCapas, je mettrai la partie qui correspond uniquement au DNI mais vous ne pourrez rien voir car dans ce type de programmation il faut tout voir ensemble. Cette recherche porte sur du texte et le DNI est déclaré sous forme de texte.

Form

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
'**********  EL EVENTO TEXCHANGED DEL TEXTFIELD txtBusqueda ********************'
Private Sub CbBuscar_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbBuscar.SelectedIndexChanged
    Try
        If pComunidad = Nothing Then
            txtFiltro.Text = ""
            campo = cbBuscar.SelectedItem.ToString
            Me.txtFiltro.Select(txtFiltro.Text.Length, 2)
        End If
        txtFiltro.Focus()
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, ToString)
    End Try
End Sub
 
Private Sub TxtFiltro_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFiltro.TextChanged
    If txtFiltro.Text = "" Then
        ListarClientes()
    Else
        Select Case campo
            Case "Nif"
                ClienteBindingSource.DataSource = objCliente.GetByNif(txtFiltro.Text & "%")
                If ClienteBindingSource.Count > 0 Then
                    dgv.DataSource = ClienteBindingSource
                    Dim vCliente As Cliente = TryCast(ClienteBindingSource.Current, Cliente)
                    MuestraDatos(vCliente)
                Else
                    MessageBox.Show("No hay Nif que contega este caracter tecleado", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    Exit Select
                End If
        End Select
    End If
End Sub

BLL

1
2
3
4
5
6
7
8
Public Function GetByNif(name As String) As List(Of Cliente)
    Dim objCliente As New DAOCliente
    Try
        Return objCliente.GetByComunidad(name)
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
End Function

DAL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function GetByNif(name As String) As List(Of Cliente)
    Dim Result As List(Of Cliente) = Nothing
    Using Conn As New SqlConnection(Conexion.ConnectionString)
        Try
            Conn.Open()
            Dim sql = String.Empty
            sql = "Select * From Clientes Where Nif like  @name + '%'"
            Result = Conn.Query(Of Cliente)(sql, New With {name}).AsList()
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Using
    Return Result
End Function

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Phil Rob (1546 intervenciones) el 06/02/2021 07:24:40
Hola Miguel,

Pienso que tu problema viene de el evento que has elegido.
El evento TextChanged viene con cada carácter tecleado.

Hace este ejemplo para ver :
1
2
3
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        MessageBox.Show("OK")
    End Sub

Pienso que el código siguiente puede reemplazar tu procedimiento (he cambiado el evento y he agregado 3 primeras lineas) :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub TxtFiltro_TextChanged(sender As Object, e As EventArgs) Handles TxtFiltro.TextChanged
         If e.KeyCode <> Keys.Enter Then
                Exit Sub
        End If
If txtFiltro.Text = "" Then
ListarClientes()
Else
Select Case campo
Case "Nif"
ClienteBindingSource.DataSource = objCliente.GetByNif(txtFiltro.Text & "%")
If ClienteBindingSource.Count > 0 Then
dgv.DataSource = ClienteBindingSource
Dim vCliente As Cliente = TryCast(ClienteBindingSource.Current, Cliente)
MuestraDatos(vCliente)
Else
MessageBox.Show("No hay Nif que contega este caracter tecleado", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Select
End If
End Select
End If
End Sub

De esta maniera, el código sera ejecutado cuando <Enter> viene el de la fin de la escritura del valor buscado.

Que tenga un buen día ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Miguel (281 intervenciones) el 06/02/2021 13:25:21
Hola Phil primero de todo darte las gracias por tu presteza en dar apoyo. Yo utilizo el Text_Changed porque sirve para búsquedas dinámicas así que al buscar de paso va filtrando todos los registro que hay en la tabla y te permite seguir tecleando para ir reduciendo el número de registros que te muestra.
Yo siempre utilizo este sistema por la opción que te da al hacer búsquedas cuando no tienes claro el dato concreto que quieres.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Phil Rob (1546 intervenciones) el 06/02/2021 13:39:11
OK Miguel pero en este caso no pode funcionar.

No podes ejecutar una consulta de la DB a cada carácter tecleado, lo podes solamente cuando la cadena es hecha.

No ti arriesga nada a probar mi código a lugar del otro ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Miguel (281 intervenciones) el 06/02/2021 19:50:10
Funciona bien para con textos de todo tipo pero no entiendo porque un textbox formado por una plantilla de número declarada como texto solo funciona para el primero tecleado. cuando lo sepa la razón te lo diré.
Hasta luego Phil

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Miguel (281 intervenciones) el 10/02/2021 19:35:34
Hola Phil, respecto al fallo que tenía lo he dejado durante unos días para obsesionarme y cuando lo he retomado lo vi sin problemas. El fallo era que en la llamada que hacia desde la BLL no llamada al DNi si no a otra función y esa era la razón del error.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error al hacer una búsqueda según se teclea

Publicado por Phil Rob (1546 intervenciones) el 10/02/2021 20:51:11
Muy bien !
Gracias para la información.

Veo que he te enviado un código con error . He enviado Private Sub TxtFiltro_TextChanged ... Este es un error. El buen codigo es : Private Sub TxtFiltro_KeyDown ...

1
2
3
4
Private Sub TxtFiltro_KeyDown(sender As Object, e As EventArgs) Handles TxtFiltro.KeyDown
         If e.KeyCode = Keys. ...  Then   ' La coleccion Keys da todos caracteres.
            ' ... tratamiento con este carácter ...
        End If

Puedes saber que el evento KeyDown y el evento TextChanged vienen uno tras otro y están casi iguales.
Pero, KeyDown da un beneficio con su argumento e As EventArgs. Con este variable e, puedes conocer los caracteres tecleados, inmediatamente y tratar si como te gusta. No este prohibe formatos de las zonas de textos.

Buenas noches,

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar