Comment afficher un message d'erreur si une table est vide ?

Résolu
olman50 Messages postés 4 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 10 juin 2010 - 2 juin 2010 à 11:17
cs_jemaoui Messages postés 5 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 29 avril 2011 - 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

8 réponses

olman50 Messages postés 4 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 10 juin 2010
4 juin 2010 à 11:30
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
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 juin 2010 à 17:58
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
0
olman50 Messages postés 4 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 10 juin 2010
3 juin 2010 à 08:56
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 ;)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 juin 2010 à 18:59
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
4 juin 2010 à 13:32
L'important c'est de trouver une solution au problème
a+
0
spameur_tn1 Messages postés 43 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 8 avril 2012
6 juin 2010 à 02:46
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"......"
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 juin 2010 à 07:25
Oui mais attention à ne pas faire cette opération en Java et à bien utiliser les possibilités SQL en faisant un SELECT Count(*) FROM ...
0
cs_jemaoui Messages postés 5 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 29 avril 2011
20 déc. 2010 à 01:46
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
0
Rejoignez-nous