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

Signaler
-
Messages postés
16114
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juillet 2021
-
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

4 réponses

Messages postés
16114
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juillet 2021
723
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 ?
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.
Messages postés
16114
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juillet 2021
723
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
Messages postés
16114
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juillet 2021
723
PS j'ai modifié ton titre
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
Messages postés
16114
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juillet 2021
723
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?
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é.
Messages postés
16114
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juillet 2021
723
Je n'utilise jamais de datareader, donc à tout hasard, Read est une méthode mais tu n'as pas mis les pararenthèses.