IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Comment tester si une requete est vide


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Comment tester si une requete est vide
    Bonjour à tous et à toutes,

    Tout est à peu près dit dans le Titre, je voudrais savoir si une requête SQL me retourne un objet ou si elle est vide, j'ai trouvé une astuce avec un boolean mais je voudrai savoir si il est possible de faire quelque chose de plus propre ? Je vous met dans un premier temps mon code sans l'astuce du boolean, puis avec l'astuce.

    Merci par avance du temps pris à me lire et/ou à me répondre.


    Code sans le boolean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     Dim ctn As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.Ace.OLEDB.12.0;  Data Source = reclamation.accdb")
     
    Private Sub BT_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_AJOUT.Click
     
            If TXT_REF.Text = "" Then
                MsgBox("Veuillez entrer une valeur", MsgBoxStyle.OkOnly, "Erreur")
            Else
     
                Dim cmd As IDbCommand
                Dim lecteur As IDataReader
                ctn.Open()
     
                cmd = ctn.CreateCommand
                cmd.CommandText = "select * from Client where RefClient =" + TXT_REF.Text
                lecteur = cmd.ExecuteReader
     
     
                'Si la référence client existe on lit le résultat de la requete et on affiche
     
                Do While lecteur.Read
                    LBL.Text = "la référence client est " & lecteur.GetInt32(0) & " son nom est " & lecteur.GetString(1)
                Loop
     
     
                'Sinon
     
                'msgbox du type le client n'existe pas dans la BDD voulez vous créer une nouvelle fiche client ?
     
            End If
     
     
            ctn.Close()

    Code avec le Boolean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
     Dim ctn As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.Ace.OLEDB.12.0;  Data Source = reclamation.accdb")
     
        Private Sub BT_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_AJOUT.Click
     
            Dim exist As Boolean = False
     
            If TXT_REF.Text = "" Then
                MsgBox("Veuillez entrer une valeur", MsgBoxStyle.OkOnly, "Erreur")
            Else
     
                Dim cmd As IDbCommand
                Dim lecteur As IDataReader
                ctn.Open()
     
                cmd = ctn.CreateCommand
                cmd.CommandText = "select * from Client where RefClient =" + TXT_REF.Text
                lecteur = cmd.ExecuteReader
     
                'Si la référence client existe on lit le résultat de la requete et on affiche
     
                Do While lecteur.Read
                    LBL.Text = "la référence client est " & lecteur.GetInt32(0) & " son nom est " & lecteur.GetString(1)
                    exist = True
                Loop
     
                'Sinon
                If exist = False Then
                    MsgBox("Ce client n'existe pas. Voulez vous ajouter ce client à la base de donnée", MsgBoxStyle.YesNoCancel, "Ajouter")
                End If
     
            End If
     
            ctn.Close()

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Salut,

    Voici une fonction issue d'une classe dont je me sert pour faire mes accès SQL (sur un moteur SQL Serveur, donc il faudra adapter avec OleDb mais c'est la même architecture que SqlClient)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Public Function ExecuteSelect(ByVal strReq As String) As DataTable
                Dim dt As DataTable = Nothing
                Dim ds As DataSet = New DataSet
                Dim sqlAdap As SqlDataAdapter
     
                Try
                    Me.Connect()
                    sqlCom = New SqlCommand(strReq, sqlCon)
                    sqlAdap = New SqlDataAdapter(sqlCom)
                    sqlAdap.Fill(ds, "TableGenerique")
                    dt = ds.Tables("TableGenerique")
                    Me.Disconnect()
                    Me.NoError()
     
                Catch ex As Exception
                    Me.SetError(ex.Message)
                End Try
     
                Return dt
            End Function
    Le "sqlCon" est déclaré en privé dans ma classe et est initialisé à la demande.
    Le Me.connect () sert à appeler la fonction "Connect" de sqlcon.

    La fonction va executer la requête passée en paramètre, puis te retourner un composant "DataTable".

    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim MesDonnees as DataTable
    Dim MaRequete as String ="select * from unetable"
     
    MesDonnees = ExecuteSelect(MaRequete)
    If MesDonnees.Rows.Count = 0 Then
    '''Pas de résultat
    Else
    For each line as DataRow in MesDonnees.Rows
    '''line représente une ligne de données, accessible par line.Item("MaColonne")
    Next
    End if
    voilà qui devrait t'aider

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut, et merci de ta réponse,

    En effet ça m'aide énormement car je comprends ton code en revanche je n'arrive pas à trouver les équivalences sur le moteur OleDB...

    Si quelqu'un pouvait me mettre un peu sur la voie, je suis tout à fait preneur.

    Merci par avance !

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    La propriété HasRows du DbDataReader devrait suffire largement.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour et merci de ta réponse je venais pour mettre en résolu mon topic, mais du coup le dernier message m'intrigue, je vous donne la solution que j'ai trouvée (= copiée sur Luc1an0 ), est ce que la solution avec la propriété Hashrow serait plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    Imports System.Data.OleDb
     
    Public Class Main
     
     
        Dim ctn As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.Ace.OLEDB.12.0;  Data Source = reclamation.accdb")
     
        Private Sub BT_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_AJOUT.Click
     
            Dim cmd As OleDbCommand
            Dim Adapteur As OleDbDataAdapter
            Dim dt As DataTable = Nothing
            Dim ds As DataSet = New DataSet
            Dim rq As String = "SELECT * FROM client WHERE Refclient =" & TXT_REF.Text
     
     
            'On voure la connection on execute la requete, et on remplit dt et ds
            ctn.Open()
            cmd = New OleDbCommand(rq)
            Adapteur = New OleDbDataAdapter(cmd)
            cmd.Connection = ctn
            Adapteur.Fill(ds, "Client")
            dt = ds.Tables("Client")
            ctn.Close()
     
     
            'on fait le test sur dt
            If dt.Rows.Count = 0 Then
                LBL.Text = "Le client " & TXT_REF.Text & " n'existe pas"
     
            Else
                LBL.Text = " Le client " & dt.Rows(0).Item("nomclient").ToString()
            End If
     
     
        End Sub
    End Class
    En tout cas merci de vos réponses, ça fait plaisir !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tester si le résultat d'une requete est vide
    Par monstour dans le forum ASP
    Réponses: 13
    Dernier message: 04/10/2006, 14h14
  2. [langage] Comment tester si une chaine est vide
    Par |Bio dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 15h05
  3. Comment tester si un repertoire est vide sous Linux
    Par chouchouappc dans le forum Linux
    Réponses: 3
    Dernier message: 24/02/2005, 12h03
  4. Tester si une table est vide
    Par rsc dans le forum SQL
    Réponses: 2
    Dernier message: 01/07/2004, 16h25
  5. [JDBC]tester si une table est vide
    Par zozolh2 dans le forum JDBC
    Réponses: 5
    Dernier message: 28/05/2004, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo