Recuperar el resultado de un select en un datagridview

JeanMarc -  
 Usuario anónimo -
Bonjour.
Estoy trabajando en un proyecto de gestión de alquiler de coches.
He creado un formulario para buscar información sobre clientes que ya existen en mi base de datos (Access).
He escrito una consulta SQL en el evento TextChanged de un textBox que me devuelve, en un DataGridView, la información sobre los clientes cuyos nombres comienzan con la letra que he especificado en el textBox, pero la consulta no se ejecuta.

Aquí está mi código:

Private Sub txtRecherche_TextChanged(sender As Object, e As EventArgs) Handles txtRecherche.TextChanged
dtgResult.Rows.Clear()
infocon.mareq = "Select MatCli, NomCli, PrenomCli from CLIENT where NomCli LIKE '" & Trim(txtRecherche.Text) & "*'"

Try
infocon.proc_connexion()
If infocon.rdr.Read Then
dtgResult.Rows.Add(infocon.rdr(0), infocon.rdr(1), infocon.rdr(2))
While infocon.rdr.Read
dtgResult.Rows.Add(infocon.rdr(0), infocon.rdr(1), infocon.rdr(2))
End While
End If
Catch ex As Exception

End Try
End Sub

5 respuestas

  1. Usuario anónimo
     
    Hola

    Para publicar un código legible, gracias por usar las etiquetas de código, consulta este pequeño tutorial https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Por otro lado, tu título habla de un datagrid (control WPF) y el cuerpo del mensaje de datagridview (control Winform), no son las mismas tecnologías ni los mismos controles.

    ¿Puedes confirmar cuál estás utilizando?

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    0
    1. JeanMarc
       
      Bonjour.
      Gracias por su respuesta.
      De hecho, estoy utilizando un DataGridView en mi código y el código está en vb.net.

      Aquí está el código:
       Private Sub txtRecherche_TextChanged(sender As Object, e As EventArgs) Handles txtRecherche.TextChanged dtgResult.Rows.Clear() infocon.mareq = "Select MatCli, NomCli, PrenomCli from CLIENT where NomCli LIKE '" & Trim(txtRecherche.Text) & "*'" Try infocon.proc_connexion() If infocon.rdr.Read Then dtgResult.Rows.Add(infocon.rdr(0), infocon.rdr(1), infocon.rdr(2)) While infocon.rdr.Read dtgResult.Rows.Add(infocon.rdr(0), infocon.rdr(1), infocon.rdr(2)) End While End If Catch ex As Exception End Try End Sub


      Gracias de antemano por sus respuestas.
      0
  2. Usuario anónimo
     
    Sí, el código behind está en vb.net, pero la tecnología de la interfaz es winform.
    En .net puedes tener varias otras tecnologías de interfaz
    • wpf
    • asp
    • uiApp
    • etc….


    ¿Cuál es el tipo del objeto infocon?
    ¿El datagridview está vacío en ese momento? Si no, entonces debería empezar por vaciarlo
    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    0
    1. Usuario anónimo
       
      PS he modificado tu título.
      0
    2. JeanMarc
       
      L'objet infocon es de tipo InfoConnection, que es una clase que he creado. Esta clase me permite gestionar la conexión con la base de datos y la ejecución de consultas.
      Aquí está su código:
       Public Class InfoConnexion Public cnn As SqlConnection Private macon As New OleDbConnection 'Declara una variable macon de tipo oledb conexión e instanciada(New) Public rdr As OleDbDataReader Private strcon As String Private cmd As OleDbCommand Public mareq As String Friend meq As String 'procedimiento que permite hacer la conexión y ejecutar los comandos sql Public Sub proc_connexion() strcon = connect 'permite la conexión a la base de datos macon = New OleDbConnection(strcon) macon.Open() cmd = New OleDbCommand(mareq, macon) rdr = cmd.ExecuteReader() End Sub Public Sub pro_deconnexion() rdr.Close() macon.Close() End Sub Public Function la_table() As DataTable strcon = connect 'permite la conexión a la bd macon = New OleDbConnection(strcon) macon.Open() cmd = New OleDbCommand(mareq, macon) ' Dim dt As New DataSet Dim ds As DataTable = New DataTable Dim dat As New OleDbDataAdapter(cmd) dat.Fill(ds) 'ds = dt.Tables(0) macon.Close() Return (ds) End Function End Class
      0
  3. Usuario anónimo
     
    Ok

    No has respondido a la segunda pregunta, es decir, ¿está vacío el datagridview?

    Por otro lado, si la conexión ya está establecida, creo que eso puede causar problemas.

    ¿Has ejecutado el código paso a paso para ver qué está sucediendo?

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    0
    1. JeanMarc
       
      Sí, el DataGridView está vacío. Lo vacié con la primera línea de código.

      dtgResult.Rows.clear()


      Ejecuté paso a paso y no hubo ningún error durante la ejecución. Solo que al llegar al nivel de la condición if :

      If infocon.rdr.Read Then dtgResult.Rows.Add(infocon.rdr(0), infocon.rdr(1), infocon.rdr(2)) While infocon.rdr.Read dtgResult.Rows.Add(infocon.rdr(0), infocon.rdr(1), infocon.rdr(2)) End While End If


      El código dentro de la estructura no se ejecuta.
      Es decir, la condición no se verifica. Pensé que podría ser un problema con mi consulta, así que cambié la consulta y funcionó correctamente. Es en este punto donde estoy atascado.
      0
  4. Usuario anónimo
     
    Nunca utilizo un datareader, así que por si acaso, Read es un método pero no has puesto los paréntesis.

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    0