Quel est le nom de l'exception pour "doublon dans un index"
Quel est le nom de l'exception pour "doublon dans un index"
Tout depend quel(le) type/méthode celà concerne, pour l'ajout d'un objet dans un HashTable par exemple se sera un ArgumentException ... Donnes nous la ligne de code concernée, tu n'es peut être pas dans le bon sous-forum
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
Un doublon dans un index lorsque je veux ajouter un enregistrement dans un table MS Access (base de données). Le champ en question est indexé (Oui, sans doublons). Alors, lorsque l'on essaie d'enregistrer un enregistrement dans ce champ (même valeur qu'un autre champ), il génère une erreur comme "Doublon dans un index......". J'aimerais récupérer cette erreur pour avertir l'utilisateur pour qu'il puisse corriger et enregistrer à nouveau.
remplacer "Exception" par le mot qui récupérerait cette exception ou le code si possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [Try] traitement..... [Catch objException As Exception]
Eh bien cher ami, tu es sur la bonne piste fait l'essai avec ce bloc try/catch en provoquant l'erreur souhaité et affiche objException.ToString()
le message te dira de quelle exception typée il s'agit ; sinon en mode debug tu peux suivre dans objException les InnerExceptions qu'il détient
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
L'exception qu'il me donne est :
"System.Data.OleDb.OleDbException"
C'est bien vaste comme exception! Cela peut-être plusieurs erreurs provenant des tables de MS Access. Qu'est ce qui me dit que c'est bien "Doublon dans un index...". Il faut que je sois vraiment très précis!
Pour ce qui est de "InnerException", j'essaie de m,en servir en mode "Debug" et cela ne fonctionne pas, il ferme mon formulaire tout simplement et aucun message n,apparaît à l'écran...bizarre!!!
Ex.: Catch objException As Exception
MessageBox.Show(objException.InnerException.Message)
MessageBox.Show(objException.InnerException.ToString)
et rien ne fonctionne...
merci de votre aide!
Attention il te faut mettre une conditionnelle qui s'assure de la présence d'une InnerException, maintenant pour ce qui est de la spécificité il te faudrait peut miser sur une recupération d'un HResult pour faitre une identification plus précise, à moins que la simplecomparaison de la chaine de caractères du message soit suffisante
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
J'aimerais avoir plus de précision sur "mettre une conditionnelle", "récupération d'un HResult".
Cela ne fais pas longtemps que je travaille en Vb.Net surtout pour ce qui est des exceptions!
Et si on parlait aussi de "ContraintException" ????
Merci de ton aide!
Bon ne te disperses pas stp car tu sais déjà que l'exception générique qui sera systématiquement levée côté serveur est bien OleDbException donc consultes ce lien et creuse
Euh là c'est pas propre à VB.Net c'est une notion de programmation de base mais laisses tomber et orientes toi directement sur la lecture de propriété ErrorCode de objException , tu peux verifer si le HResult (simple code de type Integer ) retourné est toujours le même ou s'il varie pour la même erreur que tu provoques, dans le premier cas de figure ce serait déjà une bonne piste de résolution non
Code : Sélectionner tout - Visualiser dans une fenêtre à part J'aimerais avoir plus de précision sur "mettre une conditionnelle"
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
Comment obtenir le HResult, je ne sais pas comment procéder!
Je n'ai aucune idée comment procéder!
Je suis complètement perdu!
Je vais voir sur le lien de "ErrorCode" que j'avais déjà trouvé, mais je ne sais pas comment procéder pour arriver à gérer l'exception que je désire!
Je manque beaucoup d'information à ce sujet!!!
Un exemple serait le bienvenue pour avoir le "HResult"!
Merci!
ok
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Imports System Imports System System.Data Imports System System.Data.OleDb Imports System.Text '... ' dans ta méthode Dim sb As New StringBuilder(String.Empty) Try ' le code à effectuer et qui contient les tests ' qui provoqueront les exceptions souhaitées Catch objException As OleDbException sb.Append(objException.ToString()) sb.Append(Environment.NewLine) sb.Append("HRESULT = ") sb.Append(objException.ErrorCode.ToString()) MessageBox.Show(sb.ToString()) Finally 'le code qui doit être absolument effectué : ' _ liberation de certaines ressources ' _ fermeture de la connection End Try 'fin de la methode
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
Cela fonctionne très bien.
Est-ce que le "HResult" va toujours me retourner le même numéro pour l'erreur "doublon dans un index".
D'après msdn, HREsult = valeur numérique codée qui est assignée à une exception spécifique.
HRESULT est une valeur 32 bits divisée en trois champs : un code de gravité, un code de service et un code d'erreur. Le code de gravité indique si la valeur de retour représente une information, un avertissement ou une erreur. Le code de service identifie la zone du système responsable de l'erreur. Le code d'erreur est un numéro unique assigné pour représenter l'exception.
Si oui, cela serait formidable!
Je vais faire différent test pour vérifier!
Un gros merci!
Je lis le HResult de la manière suivante pour obtenir un code à 10 caractères
mais cela ne fonctionne (.ErrorCode) que pour "OleDbException" et non pour "Exception"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Catch objException As System.Data.OleDb.OleDbException If objException.ErrorCode = -2147467259 Then message..... End If Catch objException As Exception autre gestion d'erreur.... End Try
J'ai fait différent test d'erreur sur les bases de données et les no. sont différents. J'ai fait des tests d'erreur ("doublon dans un index") dans différents formulaires et tables Access, et sur un autre ordinateur et j'obtient le même code d'erreur ("ErrorCode").
Je pense que j'ai trouvé ce que je recherchais. Avoir un code unique pour "trapper" une erreur particulière.
J'espère de ne pas me tromper et que je suis dans la bonne voie.
Merci beaucoup de ton aide!!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager