Récupérer le résultat d'un select dans un datagridview

JeanMarc -  
 Utilisateur anonyme -
Bonjour.
Je travail sur un une projet de gestion de location de voiture.
J'ai créer un formulaire pour rechercher des information sur des clients existant déjà dans ma base de données (Access).
J'ai écris une requête sql sur l'évènement TextChanged d'un textBox qui me renvoi, dans un DataGridView les informations sur les clients dont les nom commence par la lettre que j'ai spécifié dans le textBox, mais la requête ne s'exécute pas.

Voici mon code :

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 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Pour poster un code lisible merci d’utiliser les balises de code, voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    D’autre part ton titre parle d’un datagrid (contrôle WPF) et le corps du message de datagridview (contrôle Winform) ce ne sont pas les mêmes technologies ni les mêmes contrôles.

    Peux tu confirmer lequel tu utilises ?
    0
    1. JeanMarc
       
      Bonjour.
      Merci pour votre réponse.
      En fait c'est un DataGridView que j'utilise dans mon code et le code est en vb.net.

      Revoici le code :
      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


      Merci d'avance pour vos réponses.
      0
  2. Utilisateur anonyme
     
    Oui le code behind est en vb.net, mais la technologie de l’interface c’est winform.
    En .net tu peux avoir plusieurs autres techno d’interface
    • wpf
    • asp
    • uiApp
    • etc….


    Quel est le type de l’objet infocon?
    Le datagridview est il vide à ce moment-là ? Si non, alors il faudrait commencer par le vider
    0
    1. Utilisateur anonyme
       
      PS j'ai modifié ton titre
      0
    2. JeanMarc
       
      L'objet infocon est de type InfoConnection, qui est une classe que j'ai créé. Cette classe me permet de gérer la connexion avec la base de donnée et l'exécution des requêtes.
      Voici son code :
      Public Class InfoConnexion
      
          Public cnn As SqlConnection
          Private macon As New OleDbConnection 'Déclare une variable macon de type oledb connexion et instanciée(New)
          Public rdr As OleDbDataReader
          Private strcon As String
          Private cmd As OleDbCommand
          Public mareq As String
          Friend meq As String
      
          'procédure permetant de faire la connexion et d'exécuter les commandes sql
          Public Sub proc_connexion()
              strcon = connect 'permet la connexion à la base de donnée
              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 'permet la connexion à 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. Utilisateur anonyme
     
    Ok

    Tu n’as pas répondu à la 2eme question, à savoir est ce que le datagridview est vide?

    D’autre part, si la connexion est déjà établie, je pense que ça peut poser problème.

    As tu exécuté en pas à pas pour voir ce qui se passe?
    0
    1. JeanMarc
       
      Oui, le DataGridView est vide. Je l'ai vider avec première ligne de code.

      dtgResult.Rows.clear()


      J'ai exécuter en pas à pas détaillé. Et il n'y a aucune erreur au cours de l'exécution. Seulement, arrivé au niveau de la condition 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


      Le code à l'intérieur de la structure ne s'exécute pas.
      C'est-à-dire que la condition n'est pas vérifiée.
      Je me suis dis que c'est peut-être un problème de ma requête, alors j'ai changé de requête et ça a marché correctement. C'est à ce niveau que je suis bloqué.
      0
  4. Utilisateur anonyme
     
    Je n'utilise jamais de datareader, donc à tout hasard, Read est une méthode mais tu n'as pas mis les pararenthèses.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question