Remplacer un message d'erreur Access.... - SQL/NoSQL - Programmation
Marsh Posté le 28-04-2003 à 14:19:21
Tu dois connaitre le code d'erreur rattaché à la violation de clé (je ne l'ai plus en tête. Admettons que ce soit 3000 par exemple).
Tu ajoutes alors ceci dans ton code :
On Error GoTo Erreur
(... traitement normal...)
Erreur:
If Err.Number = 3000 Then MsgBox "Erreur - Impossible d'effectuer l'opération"
Err.Clear
Marsh Posté le 28-04-2003 à 14:28:20
Harkonnen a écrit : Tu dois connaitre le code d'erreur rattaché à la violation de clé (je ne l'ai plus en tête. Admettons que ce soit 3000 par exemple). |
Bah justement, si je fais ça, ca ne marche pas, car l'erreur n'a pas l'air de venir de l'applicatif Access, mais de la Base de données elle meme, donc, je n'arrrive pas à la catcher, meme avec un On Error !... Le message Access apparait de toute maniere !
Sniff...
Marsh Posté le 28-04-2003 à 14:32:54
Euh, avec Access, tu utilises forcément Jet comme moteur de BDD hein ! Et Jet te renvoie toujours un code d'erreur !
A mois que tu n'utilises Access comme Front-End pour lire une autre base via l'attachement de données externes ODBC ? (Oracle par exemple)
Marsh Posté le 28-04-2003 à 15:02:36
Harkonnen a écrit : Euh, avec Access, tu utilises forcément Jet comme moteur de BDD hein ! Et Jet te renvoie toujours un code d'erreur ! |
Voici exactemnt le code que j'utilise :
Private Sub Command0_Click()
On Error GoTo Err_Append
Dim strSQL As String
strSQL = "INSERT INTO Inventory ( InvID, Batch ) SELECT 1 AS Expr1, 'Essai' AS Expr2;"
DoCmd.RunSQL strSQL
Exit_Append:
Exit Sub
Err_Append:
MsgBox "C'est une erreur" Resume Exit_Append
End Sub
Et le problème est que j'obtiens toujours l'erreur "Access" comme quoi il ne peut pas ajouter les enregistrements...
Est ce normal?
Merci
Marsh Posté le 29-04-2003 à 07:40:59
salut! J'ai eu le même problème il y a peu de temps mais avec une autre erreur(ca concernant les doublons). Malheureusement, personne n'a pu m'aider! Il semblerait que ce genre d'erreur soit généré par le noyau d'Access lui-même et en ce qui me concerne, je n'ai toujours pas trouvé le moyen de la catcher... Pour finir j'ai du vérifier moi même s'il y avait des douboons dans mes tables pour ensuite faire en sorte qu'Access affiche MON mess d'erreur(tout ca en code VBA)...
Il faudrait que qqun qui domine vraiment Access vienne te donner un coup main.... au fait tu bosse dans quelle version d'Access??
Marsh Posté le 29-04-2003 à 08:06:01
Le code est bon mais vous devriez vérifier les options de runtime (qui par défaut font sauter toutes les erreurs Access à l'écran).
En Access 97: Tools/Options/Advanced, il y a un groupe de 3 optionbuttons nommé ErrorTrapping, choisir "Break on unhandled errors" (arrêt sur les erreurs non-gérées). Par défaut, l'option est Arrêt sur toutes les erreurs.
Pour finir, sachez que quelque soit le SGBD qui est vraiment derrière Access, c'est toujours Access qui gère les erreurs, donc vous
Marsh Posté le 29-04-2003 à 08:18:49
ok mais il faudra quand même modifier le code VBA pour qu'il detecte l'erreur et qu'il affiche un mess!
Marsh Posté le 29-04-2003 à 08:24:41
ben dans le code de yoyo c'est bon, ya rien à retoucher
Marsh Posté le 29-04-2003 à 08:32:25
je confirme mais je parlais plutôt pour le code de base
Marsh Posté le 29-04-2003 à 09:20:41
kamui36 a écrit : salut! J'ai eu le même problème il y a peu de temps mais avec une autre erreur(ca concernant les doublons). Malheureusement, personne n'a pu m'aider! Il semblerait que ce genre d'erreur soit généré par le noyau d'Access lui-même et en ce qui me concerne, je n'ai toujours pas trouvé le moyen de la catcher... Pour finir j'ai du vérifier moi même s'il y avait des douboons dans mes tables pour ensuite faire en sorte qu'Access affiche MON mess d'erreur(tout ca en code VBA)... |
Ca fait du bien de se sentir moins seul
Bon, je vais tester les dires de notre ami drasche...
Je reviendrai poster ici !
A toute,
Yoyo*
Marsh Posté le 29-04-2003 à 09:28:58
drasche a écrit : ben dans le code de yoyo c'est bon, ya rien à retoucher |
J'ai trouvé dans Access XP les options "à modifier", et j'ai tout essayé, mais rien n'y fait, le message Access apparait tout le temps!
Alors, j'ai essayé avec le code suivant :
On Error GoTo Err_Append
DoCmd.SetWarnings False
Dim strSQL As String
strSQL = "INSERT INTO Inventory ( InvID, Batch ) SELECT 1 AS Expr1, 'Essai' AS Expr2;"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
Exit_Append:
Exit Sub
Err_Append:
MsgBox Err.Number
Resume Exit_Append
Mais là, rien n'y fait, plus aucun message n'appparait (ce qui est encore pire !!!)
Bref, pour le moment, notre problème n'est pas réolu
Bien entendu, si je trouve la solution, je la fais partager à tous !
Merci pour votre aide!
Yoyo*
Marsh Posté le 29-04-2003 à 09:40:52
c'est bien ce que je pensais (et c'est ce qui me fait peur d'ailleurs)...
Marsh Posté le 29-04-2003 à 11:22:41
kamui36 a écrit : salut! J'ai eu le même problème il y a peu de temps mais avec une autre erreur(ca concernant les doublons). Malheureusement, personne n'a pu m'aider! Il semblerait que ce genre d'erreur soit généré par le noyau d'Access lui-même et en ce qui me concerne, je n'ai toujours pas trouvé le moyen de la catcher... Pour finir j'ai du vérifier moi même s'il y avait des douboons dans mes tables pour ensuite faire en sorte qu'Access affiche MON mess d'erreur(tout ca en code VBA)... |
Je bosse à la fois avec 97 et XP! Je possède les versions anglaises des deux...je préfère
Marsh Posté le 29-04-2003 à 12:39:17
Yoyo@ a écrit : |
faut juste faire gaffe... car les solutions que tu trouves sous XP ne sont pas toutes compatibles avec 97
bon.. moi j'ai pas la chance de bosser avec XP mais on fait sans
Marsh Posté le 29-04-2003 à 14:58:00
kamui36 a écrit : |
LA plupart du temps, tout est compatible ! J'ai jamais eu de problemes la dessus !
LEs seuls trucs qui me paraissaient pas compatibler entre les deux, ce sont des subtilités, genre un OIpenArgs qui n'existe pas avec les reports sous Access97, ou alors ADO (que je n'utilise pas) ou alors les objets Office... Enfin, rien de bloquant pour moi !
Mais... On a toujours pas notre solution !
J'ai essayé d'écrire sur le site de Krosoft, mais aps de réponse pour le moment !
Up !!!
Yoyo*
Marsh Posté le 29-04-2003 à 23:25:51
Ca y est, mes amis, j'ai la solution :
On Error GoTo Err_Append
DoCmd.SetWarnings False
Dim strSQL As String
strSQL = "INSERT INTO Inventory ( InvID, Batch ) SELECT 11254 AS Expr1, 'Essai' AS Expr2;"
Dim db As Database
Set db = CurrentDb()
db.Execute strSQL, dbFailOnError
DoCmd.SetWarnings True
Exit_Append:
Exit Sub
Err_Append:
MsgBox "Putain, ca marche!!!"
Resume Exit_Append
Ce db.Execute strSQL, dbFailOnError permet de récupérer l'erreur si elle se produit !
Punaise, c'est fou, j'ai du écrire à Microsoft, et ils ont eu du mal à me trouver une réponse...Y en a un qui m'a dit que c'était parce que mon formulaire était lié à ma table (ce qui était faux) et un autre qui m'a sorti un truc hyper ocmpliqué en ADO...
Et finalement, le dernier, il m'a sorti la bonne réponse...
A tester sous 97, mais a priori, ca devrait marcher...
Yoyo*
Marsh Posté le 28-04-2003 à 14:14:47
Salut :
Pour simplifier, voici ma question/probleme :
Je possède une table Inventory
avec deux champs :
InvID : autonumber
Batch : Text
J'ai un formulaire dans lequel j'exécute le code :
Dim strSQL As String
strSQL = "INSERT INTO Inventory ( InvID, Batch ) SELECT 1AS Expr1, 'Essai' AS Expr2;"
DoCmd.RunSQL strSQL
La première fois, ma table est vide, donc, tout marche bien, et la deuxieme fois que je l'exécute, j'ai une erreur comme quoi Access n'a pas pu ajouter les enregistrement à cause d'une violation de clé, etc...
Je voudrais savoir comment je pourrais catcher cette erreur, et mettre à la place un truc du genre MsgBox("Erreur - Impossible d'effectuer l'opération" ), au lieu d'avoir ce message "pas beau".
Merci pour vos rpéonses...
Yoyo*
---------------
It's nice to be important, but it's more important to be nice