TOUJOURS LE ON ERROR

Résolu
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 1 juin 2005 à 08:52
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 1 juin 2005 à 10:51
toujours mon probleme avec le on error...
Quelqu'un pourrait me dire si je pe utiliser le on error de cette maniere ou si une solution plus facile s'offre à moi. En fait en faisant à ma maniere, je suis obligé de retaper sur chaque feuille le ErreurmsgBox... Je pense qu'il y a bien mieux...
Merci d'avance

Private Sub Command5_Click()
ErreurMsgBox:
MsgBox ("erreur")
Exit Sub
Set con = New ADODB.Connection
'connection à la base
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & "H:\projet\metrologie.mdb"
con.Open

Set rs = New Recordset
Set rs1 = New Recordset
Set rs2 = New Recordset


rs1.Open "select * from [type ac] ", con, adOpenDynamic, adLockOptimistic
p = rs1![num_type]



rs.Open "insert into ac (num_type, design_ac, num_ac) values ('" & p & "', '" & txtdes.Text & "','" & txtsap & "') ", con, adOpenDynamic, adLockOptimistic
On Error GoTo ErreurMsgBox


rs2.Open "insert into FOURNIR (Article, Fourn) values ( '" & txtsap & "', '" & txtfour.Text & "') ", con, adOpenDynamic, adLockOptimistic
On Error GoTo ErreurMsgBox


End Sub

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 juin 2005 à 10:07
Ce n'est pas une solution, je pense...
tu dois gérer les erreurs..

dans ton cas, deux insert qui se suivent, je te conseille d'utiliser une transaction SQL
si une des requetes coince, les deux sont annulées....

tu peux pour ton messagebox, utiliser une fonction qui exectuerai tes requetes... afficherai au besoin ton MsgBox ou renverrai un code d'erreur...

voici une version revue de ta procédure :

Private Sub Command5_Click()
Dim Con As New ADODB.Connection
Dim RS As New Recordset
Dim num_type As String


Con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & "H:\projet\metrologie.mdb"
On Error GoTo Except_DataError
Con.Open
RS.Open "SELECT * FROM [type ac]", Con, adOpenDynamic, adLockOptimistic
If RS.RecordCount > 0 Then
RS.MoveFirst
num_type = RS.Fields("num_type").Value


Con.BeginTrans
Con.Execute "INSERT INTO [ac] ([num_type], [design_ac], [num_ac]) VALUES ('" & num_type & "', '" & txtdes.Text & "','" & txtsap & "') "
Con.Execute "INSERT INTO [FOURNIR] ([Article], [Fourn]) VALUES ( '" & txtsap & "', '" & txtfour.Text & "') "
Con.RollbackTrans
End If
RS.Close
Set RS = Nothing

Con.Close
Set Con = Nothing
Exit Sub
Except_DataError:
Err.Raise Err.Number, "Command5_Click", "Une erreur est survenue lors de l'accès a la baase de données." & vbNewLine & Err.Description
If Not RS Is Nothing Then
Set RS = Nothing
End If
If Not Con Is Nothing Then
If Con.State = adStateOpen Then
Con.Close
End If
Set Con = Nothing
End If
End Sub

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 juin 2005 à 10:28
Erf, en VB 6, tu n'as pas trop le choix !



En VB.NET, il me semble que le langage gère les exeptions mais pas VB 6 !



Tu peux déjà mettre la routine de traitement d'erreur à la fin de ta
procédure au lieu de la mettre au début, ca t'économise le Exit sub
après la routine, c'est déjà cà...


Par contre,

rs.Open "insert into ac (num_type, design_ac, num_ac) values ('"
& p & "', '" & txtdes.Text & "','" & txtsap &
"') ", con, adOpenDynamic, adLockOptimistic

On Error GoTo ErreurMsgBox





rs2.Open
"insert into FOURNIR (Article, Fourn) values ( '" & txtsap &
"', '" & txtfour.Text & "') ", con, adOpenDynamic,
adLockOptimistic

On Error GoTo ErreurMsgBox



Je ne vois pas l'intérêt d'en mettre un à la fin ! autant en mettre qu'un avant la première requête d'ouverture, ca suffit !




DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
Slyders Messages postés 300 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 8 janvier 2010 2
1 juin 2005 à 09:38
tu peu faire
erreurmsgbox : exit sub
ou alors
On error resume next
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
1 juin 2005 à 10:12
ben avec le on error resume next ca marche pas, par contre le exit sub marche...
Mais le truc c que je voudrais savoir ou placer le erreurmsgbox : exit sub pour que chaque on error goto erreurmsgbox m'y raméne
0

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

Posez votre question
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
1 juin 2005 à 10:25
merci renfield, ca marche nickel ta maniere... juste une question, comment je fais pr mettre la msgbox ds une fction? Je veux juste que si il y a une erreur, je recoive 1 msgbox qui me dit "rempissez correct les champs" (par ex) mais en gardant ta maniere....merci pour ton aide
0
scortex84 Messages postés 379 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 20 avril 2011 1
1 juin 2005 à 10:46
Hello,

Effectivement, VB.NEt integre le TRY / Catch qu'il a emprunté au JAVA pour la gestion des exceptions. Le principal avantage par rapport au "On error go to", c'estla grande simplicité de gestion de l'erreur.

seb.
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
1 juin 2005 à 10:51
Merci pour votre aide! Ca fait plaisir!!
0
Rejoignez-nous