cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007
-
30 avril 2007 à 19:12
cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007
-
30 avril 2007 à 23:34
Bonjour,
Lorsque j'exécute une requête d'ajout d'un enregistrement dans une table Access, il arrive que cet enregistrement soit refusé pour diverses raisons (doublon sur clé primaire, valeur nulle dans un champ qui l'interdit...). Mais ce refus n'entraîne pas de message d'erreur dans l'application VB6!
Quelqu'un pourrait-il me dire comment générer un message d'erreur dans une situation semblable ?
Merci d'avance.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 30 avril 2007 à 23:22
Bonsoir tout le monde,
@bellavista
c' est normal, puisque tu ne fais pas de MsgBox au niveau de Error !
Error:
MsgBox Err.Description
<strike>AddCustomer = False</strike> 'pas la peine puisque AddCustomer est resté False
Exit Function
Quand il s' agit d' une transaction , je te propose ceci:
tu dois procéder ainsi:
Function AddCustomer(CustID As Long, CustName As String) As Boolean
On Error GoTo Error
DBEngine.WorkSapaces(0).BeginTrans 'début de la transaction
dbs2007.Execute "INSERT INTO Customer (ID, Name) VALUES ('" & CustID & _
"', '" & CustName & "');",dbFailOnError
DBEngine.WorkSapaces(0).CommitTrans 'validation de la transaction
AddCustomer = True
Exit Function
Error:
DBEngine.WorkSapaces(0).RollBack 'Annulation de la transaction
MsgBox Err.Description
End Function
Changes par la même occasion le nom de l' etiquette, Error est un mot reservé
qui peut induire en erreur.
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 30 avril 2007 à 19:38
Salut,
Quand tu exécutes ta requette, fait le par une fonction qui te renvois pas true si ok ou False si echec(erreur), tu gères l'erreur dans ta fonction qui execute ta requête...
cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007 30 avril 2007 à 21:36
Merci pour ta réponse, mais cela ne marche pas !
Exemple :
-j'ai une db (dbs2007) contenant la table "Customer", avec le champ "ID" comme primarykey, et un champ "Name".
-je crée la fonction "AddCustomer" :
Function AddCustomer(CustID As Long, CustName As String) As Boolean
On Error GoTo Error
dbs2007.Execute "INSERT INTO Customer (ID, Name) VALUES ('" & CustID & "', '" & CustName & "')"
AddCustomer = True
Exit Function
Error:
AddCustomer = False
End Function
- j'exécute d'abord : AddCustomer(0, "Julie") : c'est OK.
- j'exécute ensuite : AddCustomer(0, "Michel") : pas de nouveau record car doublon sur clé primaire, mais pas de message d'erreur !!!
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 30 avril 2007 à 21:59
Salut,
En y pensant bien(pour ma part), c'est normal que tu ne puisses pas enregistrer la position d'un nouveau contact, car une clé primaire est un "champ" numérique qui s'auto-incrémente....
Si tu veux avoir la possibilité de mettre plusieur contact qui ont le même prénom, il te faut mettre dans access sur le champ qui te convient : Indéxé : Oui sans doublon(exemple pour les prénoms)..De ce fait tu pourra avoir 2 dupont mais avec un prénom différent...
A+
Exploreur
Vous n’avez pas trouvé la réponse que vous recherchez ?
' là on traite l'erreur, avec résultat en conséquence
AddCustomer = Not Err.Number
AddCustomer = True
If Err.Number Then
MsgBox Err.Description
AddCustomer = False
Err.Clear
End If
Ici on traite l'erreur dans la fonction, mais tu peux la traitée dans la form ou tu appelles ta fonction...
A+
Exploreur
cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007 30 avril 2007 à 22:38
Merci, mais je crois que tu ne me comprends pas très bien (ou je ne m'exprime pas assez clairement...)
Il ne faut voir mon exemple que comme un exemple de situation où j'aimerais avoir un message d'erreur et non comme la table que je désire réaliser.
Ce n'est pas un problème de clé primaire, mais d'enregistrement non effectué sans générer de message d'erreur.
Je viens de tester ta fonction, mais le msgbox n'est pas exécuté dans la situation de mon exemple !
A+
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 30 avril 2007 à 22:53
Salut,
Non, j'ai pas bien du te comprendre alors....Tu veux générer une erreur ou gérer une erreur ?
Car c'est normal que la msgbox ne s'affiche pas du moment que tu n'as pas d'erreur, si tu en avais une elle s'afficherai en toute logique, quand l'utilisateur voudra entrer quelque chose qui aura été au prélable renseigné dans la base sans doublon, ainsi qu'un champ vide(null interdit)..Et même ou l'enregistrement ne sera pas effectué tu aura aussi une erreur retourné par la base access..
cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007 30 avril 2007 à 23:02
Re-salut,
Mon problème est que l'enregistrement que la fonction tente d'ajouter est rejeté par Access (ou, plus précisément, Access ignore ma demande d'ajout) sans générer de message d'erreur !
Pas de message généré, donc impossible de gérer.
Mais peut-être as-tu, toi, un message d'erreur généré ?
A+
cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007 30 avril 2007 à 23:12
Je peux encore ajouter une précision : si, DANS Access, j'essaie d'ajouter un record à problème, j'ai un message d'erreur. Mais par contre, si c'est du code VB6 qui tente d'ajouter un enregistrement incorrect, là, pas de message dans l'application en question !
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 30 avril 2007 à 23:16
Salut,
Du moins c'est Vb qui me retourne le numéro d'erreur quand il y en à une, vb et access "discute ensemble" mais c'est vb qui retourne le N° d'erreur....Est celle-ci s'affiche via ma msgbox err.description..C'est quoi au juste, tu veux un mesage d'erreur "stylé" ?
Si c'est le cas, relève le N° d'erreur dans chaque situation que tu peux avoir, et fait le message d'erreur "stylé"...
D'ailleurs je viens de faire l'essai avec un requête d'ajout dans une source que développe avec exactement la même fonction, j'ai modifier mon champ "nom" dans access en lui disant : Indéxé = oui, sans doublon, et bien quand j'essaye d'enregistrer un nom qui existe dans ma base, j'ai bien un retour d'erreur, comme quoi l'enregistrement ne peux se faire...
cs_bellavista
Messages postés7Date d'inscriptiondimanche 24 octobre 2004StatutMembreDernière intervention30 avril 2007 30 avril 2007 à 23:34
Merci Chaibat05 et merci Exploreur,
La fonction de Chaibat05 avec la transaction répond parfaitement à ma demande.
C'est très sympa d'avoir consacré un peu de votre temps à mon problème.
A+
Bellavista