VB6-Requête ajout dans Access [Résolu]

Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 avril 2007
- - Dernière réponse : cs_bellavista
Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 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.
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
3
Merci
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.


 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Commenter la réponse de chaibat05
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
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...

A+
Exploreur

 
Commenter la réponse de cs_Exploreur
Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 avril 2007
0
Merci
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 !!!
Commenter la réponse de cs_bellavista
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
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

 
Commenter la réponse de cs_Exploreur
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
Salut,

Je viens de revoir ta function, voici :

Function AddCustomer(CustID As Long, CustName As String) As Boolean

    On Error Resume Next

    dbs2007.Execute "INSERT INTO Customer (ID, Name) VALUES ('" & CustID & "', '" & CustName & "')"
   
' 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

 
Commenter la réponse de cs_Exploreur
Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 avril 2007
0
Merci
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+
Commenter la réponse de cs_bellavista
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
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..

A+
Exploreur

 
Commenter la réponse de cs_Exploreur
Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 avril 2007
0
Merci
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+
Commenter la réponse de cs_bellavista
Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 avril 2007
0
Merci
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 !
Commenter la réponse de cs_bellavista
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
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...

voir : 

 

A+
Exploreur

 
Commenter la réponse de cs_Exploreur
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
Bonsoir Chaibat05..

A+
Exploreur

 
Commenter la réponse de cs_Exploreur
Messages postés
7
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
30 avril 2007
0
Merci
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
Commenter la réponse de cs_bellavista