Comment afficher un message d'erreur si une table est vide ? [Résolu]

olman50 4 Messages postés mercredi 2 juin 2010Date d'inscription 10 juin 2010 Dernière intervention - 2 juin 2010 à 11:17 - Dernière réponse : cs_jemaoui 5 Messages postés lundi 20 décembre 2010Date d'inscription 29 avril 2011 Dernière intervention
- 20 déc. 2010 à 01:46
[Aperçu de votre message]
Je souhaite afficher un message d'erreur quand les tables Groupe et Classe sont vides. J'ai déjà cherché pas mal et je n'ai rien trouvé de bien voila pourquoi j'ai besoin de votre aide. Merci d'avance


voici mon code :

Private Sub btnenr_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnenr.Click
Dim v1 As Object = 0
Dim v2 As Object = 0
Dim v3 As Object = 0
Dim nomE As String
Dim prenomE As String
Dim lv1 As String = 0
Dim lv2 As String = 0


v1 = txtnumeleve.Text
v2 = txtnumclasse.Text
v3 = txtnumgroupe.Text
lv1 = txtlv1.Text
lv2 = txtlv2.Text
nomE = txtnomeleve.Text
prenomE = txtprenomeleve.Text

If Me.txtnumeleve.Text = "" Or _
Me.txtnomeleve.Text = "" Or _
Me.txtprenomeleve.Text = "" Or _
Me.txtlv1.Text = "" Or _
Me.txtlv2.Text = "" Or _
Me.txtnumclasse.Text = "" Or _
Me.txtnumgroupe.Text = "" Then

MsgBox("Vous devez remplir tous les champs. ", MsgBoxStyle.Information, "Info...")

Me.txtnomeleve.Focus()

Exit Sub

ElseIf Not IsNumeric(v1) Or Not IsNumeric(v2) Or Not IsNumeric(v3) Then
MsgBox("Veuillez saisir un numéro dans la case numéro. ", MsgBoxStyle.Information, "Info...")
Exit Sub
End If



'ouverture de la connection(à partir du répertoire de l'application)sur la même ligne
cnxstr "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\base.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()

'Création de la requête sql
sql = "select Groupe.* from Groupe"

'Création de la commande et on l'instancie (sql)
cmd = New OleDbCommand(sql)

'Création du dataadapter (dta) et on l'instancie (cmd)
dta = New OleDbDataAdapter(cmd)

'On instancie la commande (cmd) à la connection (cnx)
cmd.Connection() = cnx

'On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)
dta.Fill(dts, "Groupe")

'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)
dtt = dts.Tables("Groupe")




While rownum < dtt.Rows.Count
If txtnumgroupe.Text = dtt.Rows(rownum).Item("NumGroupe") Then
Exit While
ElseIf rownum = dtt.Rows.Count - 1 Then
MsgBox("Le groupe choisi n'existe pas. ", MsgBoxStyle.Information, "Info...")

cnx.Close()
Exit Sub

End If
rownum += 1
End While


'ouverture de la connection(à partir du répertoire de l'application)sur la même ligne
cnxstr "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\base.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()

'Création de la requête sql
sql = "select Classe.* from Classe"

'Création de la commande et on l'instancie (sql)
cmd = New OleDbCommand(sql)

'Création du dataadapter (dta) et on l'instancie (cmd)
dta = New OleDbDataAdapter(cmd)

'On instancie la commande (cmd) à la connection (cnx)
cmd.Connection() = cnx

'On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)
dta.Fill(dts, "Classe")

'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)
dtt = dts.Tables("Classe")




While rownum < dtt.Rows.Count
If txtnumclasse.Text = dtt.Rows(rownum).Item("NumClasse") Then
Exit While
ElseIf rownum = dtt.Rows.Count - 1 Then
MsgBox("La classe choisie n'existe pas. ", MsgBoxStyle.Information, "Info...")

cnx.Close()
Exit Sub

End If
rownum += 1
End While



If (txtlv1.Text <> "anglais" And txtlv1.Text <> "italien" And txtlv1.Text <> "allemand" And txtlv1.Text <> "espagnol") Or (txtlv2.Text <> "anglais" And txtlv2.Text <> "italien" And txtlv2.Text <> "allemand" And txtlv2.Text <> "espagnol") Then
MsgBox("Veuillez choisir une LV1 ou LV2 exitante. ", MsgBoxStyle.Information, "Info...")
Exit Sub
End If





'ouverture de la connection(à partir du répertoire de l'application)
conn "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\base.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = conn
cnx.Open()

'exécution de la commande(cmd),
'du dataadapter (dta),
'du dataset(dts),
'de la datatable (dtt)
'sql=>cmd=>dta
'cnx=>cmd
'dta=>dts=>dtt
sql = "select Eleve.* from Eleve"

cmd = New OleDbCommand(sql)
dta = New OleDbDataAdapter(cmd)
cmd.Connection() = cnx

'chargement du DataSet à partir du DataAdapter
dta.Fill(dts, "Eleve")

'chargement de la DataTable à partir du DataSet
dtt = dts.Tables("Eleve")


While rownum <> dtt.Rows.Count
If v1 = dtt.Rows(rownum).Item("NumEleve") Then
MsgBox("Ce numéro d'élève est déjà attribue, veuillez en choisir un autre. . ", MsgBoxStyle.Information, "Info...")
Exit Sub

End If
rownum += 1
End While




'si un champ n'est pas rempli fin de procédure


If IsNumeric(v1) And IsNumeric(v2) And IsNumeric(v3) Then
'crátion d'une nouvelle ligne avec les données des textbox
dtr = dts.Tables("Eleve").NewRow
dtr("NumEleve") = Me.txtnumeleve.Text
dtr("NomEleve") = Me.txtnomeleve.Text
dtr("PrenomEleve") = Me.txtprenomeleve.Text
dtr("LV1") = Me.txtlv1.Text
dtr("LV2") = Me.txtlv2.Text
dtr("NumClasse") = Me.txtnumclasse.Text
dtr("NumGroupe") = Me.txtnumgroupe.Text


'ajout de la ligne dans le DataSet
dts.Tables("Eleve").Rows.Add(dtr)

'création et exécution du commandbuilder
'pour mettre à jour le DataAdapter
cmdb = New OleDbCommandBuilder(dta)

'mise à jour des données du DataAdapter
'à partir du commandbuilder
dta.Update(dts, "Eleve")

'on vide le dataset pour le recréer avec
'les nouvelles données
dts.Clear()
dta.Fill(dts, "Eleve")
dtt = dts.Tables("Eleve")

'mise à jour de la datagrid
DataGrid1.SetDataBinding(dts, "Eleve")

'aller au début du fichier
rownum = 0

'affichage des données dans les texbox
Me.txtnumeleve.Text = dtt.Rows(rownum).Item("NumEleve")
Me.txtnomeleve.Text = dtt.Rows(rownum).Item("NomEleve")
Me.txtprenomeleve.Text = dtt.Rows(rownum).Item("PrenomEleve")
Me.txtlv1.Text = dtt.Rows(rownum).Item("LV1")
Me.txtlv2.Text = dtt.Rows(rownum).Item("LV2")
Me.txtnumclasse.Text = dtt.Rows(rownum).Item("NumClasse")
Me.txtnumgroupe.Text = dtt.Rows(rownum).Item("NumGroupe")

'activation des boutons
btnp.Enabled = True 'premier
btnprec.Enabled = True 'précédent
btnsui.Enabled = True 'suivant
btnder.Enabled = True 'dernier

btnmod.Enabled = True
btnsup.Enabled = True

btnajou.Enabled = True
btnenr.Enabled = False 'valider

btnajou.Text = "Ajouter"

MsgBox("L'élève " & nomE & " " & prenomE & " a été créé. ", MsgBoxStyle.Information, "Info...")

cnx.Close()

Else : MsgBox("Veuillez saisir un chiffre/nombre dans les cases numéros. ", MsgBoxStyle.Information, "Info...")

End If


End Sub
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
olman50 4 Messages postés mercredi 2 juin 2010Date d'inscription 10 juin 2010 Dernière intervention - 4 juin 2010 à 11:30
3
Merci
merci pour ton aide mais j'ai trouvé beaucoup simple ^^ avec ceci :

If rownum > dtt.Rows.Count - 1 Then
MsgBox("Aucun groupe n'existe, veuillez créér les groupes nécessaisres.", MsgBoxStyle.Information, "Info...")
Exit Sub
End If

Merci olman50 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de olman50
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 2 juin 2010 à 17:58
0
Merci
Tu n'as qu'à lancer une requete "select count(*) from table" et en fonction de ce que donne count(*) tu peux afficher ton message.

Pour arreter l'execution du code, tu peux utilier un equivalent du try/catch en vb :

au début de la procedure : onError Goto CatchException
et à la fin une étiquette
NormalExit :
Exit Sub
CatchException :
Msgbox "erreur"
goto NormalExit
Commenter la réponse de cs_Julien39
olman50 4 Messages postés mercredi 2 juin 2010Date d'inscription 10 juin 2010 Dernière intervention - 3 juin 2010 à 08:56
0
Merci
merci de ton aide mais je ne vois pas trop ou mettre tout ça :s
si tu pouvais m'éclairer un peu plus, Merci d'avance ;)
Commenter la réponse de olman50
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 3 juin 2010 à 18:59
0
Merci
En fait, ce que je ferais si j'étais de toi, c'est que je ne me soucierais pas trop de si les tables sont vides ou pas. Le problème c'est que lorsque les tables sont vides, tes traitements vont renvoyer une erreur, il faudra alors intercepter cette erreur de la façon suivante.

Je ne sais pas comment tu appelles tes fonction d'accès aux données mais admettons que ce soit sur un clique de bouton dans la commande du bouton la premiere ligne sera : On Error Goto CatchException 'indique au programme ce qu'il doit faire en cas d'erreur

Dans ce cas, tu lui dis que quand il y a une erreur, il dois rejoindre l'étiquette CatchException. Cette étiquette, tu dois la définir, pour cela, à la fin de ton code, juste avant le End Sub associé au bouton, tu écris
NormalExit :
Exit Sub
CatchException :
Msgbox "erreur"
goto NormalExit

Pour résumer

Sub boutonClick()
On Error Goto CatchException

'Ton code

NormalExit :
Exit Sub
CatchException :
Msgbox "erreur"
goto NormalExit
End Sub
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 4 juin 2010 à 13:32
0
Merci
L'important c'est de trouver une solution au problème
a+
Commenter la réponse de cs_Julien39
spameur_tn1 43 Messages postés samedi 21 juillet 2007Date d'inscription 8 avril 2012 Dernière intervention - 6 juin 2010 à 02:46
0
Merci
tu peut bien sur faire une fonction qui calcule les ligne de ta table, par la suite si la somme est< 0
tu met
msgbox"......"
Commenter la réponse de spameur_tn1
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 6 juin 2010 à 07:25
0
Merci
Oui mais attention à ne pas faire cette opération en Java et à bien utiliser les possibilités SQL en faisant un SELECT Count(*) FROM ...
Commenter la réponse de cs_Julien39
cs_jemaoui 5 Messages postés lundi 20 décembre 2010Date d'inscription 29 avril 2011 Dernière intervention - 20 déc. 2010 à 01:46
0
Merci
bonjour,
tu peut utilser une fonction qui te donne qomme resultat si ta table est vide ou non

la fonction sera:
    Private Function estVide(ByVal table As String) As Boolean
        'tu fait dabort les declaration necessaire pour te connecter a ta BD
        'avec la requete SQL
        Dim r As String
        r = "SELECT COUNT(*) FROM " + table
        Dim n As Integer
        'puis tu execute ta commande
        n = cmd.executesclar()
        If n = 0 Then
            estVide = True
        Else
            estVide = False
        End If

    End Function


et tu appel cette fonction pour tester si une table est vide
 
        If estVide("matable") Then
            MsgBox("la table est vide")
        Else
            ....traitement
        End If



Mohamed JEMAOUI
Commenter la réponse de cs_jemaoui

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.