Ca me gonfle "l'exception xxx n'a pas été gérée" :o) !!!

superchinois Messages postés 64 Date d'inscription vendredi 14 décembre 2001 Statut Membre Dernière intervention 19 juin 2010 - 19 juin 2010 à 16:04
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 20 juin 2010 à 15:32
Salut à tous,

ça me gonfle ! Je suis passé depuis quelques temps de vb6 à vb net et je me débrouille pas trop mal... En revanche j'en ai vraiment marre de devoir tester tous les trucs possibles et inimaginables sur mes variables avant de m'en servir (est-ce que c'est nul, est-ce que c'est chaine vide, est-ce que c'est pas un long infini...)
Et le compilateur me saoule et fait planter mon prog à chaque fois parce qu'il m'avertit.

Ex :
- j'ai écrit une fonction find(tbl as system.data.datatable, stx as string)
- je l'appelle de la façon suivante : find(tblvaleurs,"code=" & lnx.tostring)
- lnx étant un long, il m'envoie une erreur "l'exception invalidcastexception n'a pas été gérée".

Est-ce que je lui demande si sa grand-mère fait du vélo moi ? je suis sur que mon lnx sera toujours ok à ce moment du programme. Alors est-il possible de désactiver ces p... de controles de contenu des variables ou est-ce qu'on doit absolument tout tester et faire du code inutile ?

Actuellement c'est ce que je fais et je passe plus de temps à écrire le code qui controle mes variables que le programme en lui-même :o)

Merci par avance les topains...



Attention à Astérix, mon Pitt Bull

6 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
19 juin 2010 à 16:24
Bonjour,

Mets TOUJOURS Option Explicit et Strict à On

Il te dit que le cast n'est pas bon, que ton tblvaleurs n'est pas de type system.data.datatable.

à toi de typer tes variable et les gérer correctement.

0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 juin 2010 à 16:43
"l'exception invalidcastexception n'a pas été gérée"

Certes, mais où ??????

Tu as déroulé ton code en pas à pas étendu, pour voir sur quelle instruction ça plante vraiment, vérifié tes variables, elles sont toutes correctement déclarées ?

Option Explicit ON, Option Strict ON obligatoire, à définir directement dans les options de Visual Studio comme ça c'est valable l'ensemble du code et de tous les projets créés.

Et on garde en permanence afficher la fenêtre de la liste des erreurs. On n'envisage même pas d'exécuter le code tant que cette liste n'est pas vide.
Une erreur dans cette liste et le code ne compile pas, un avertissement et c'est un bug potentiel avec risque de plantage du logiciel. On est averti donc on corrige.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
superchinois Messages postés 64 Date d'inscription vendredi 14 décembre 2001 Statut Membre Dernière intervention 19 juin 2010
19 juin 2010 à 22:45
Re,

Cette erreur se produit pile poil dans l'exemple que je vous ai donné. à ce moment là, lnx vaut 11. En fait la machine m'explique qu'elle ne veut pas continuer parce que je fais un transtypage de lnx en string (car la fonction "find" que j'ai écrite attend un type string), et m'indique que ça pourrait planter si mon lnx était de type infini (à un moment faut s'arreter de picoler). Mais si je commence à m'amuser à créer une variable string qui ne va servir qu'à récupérer mon lnx.tostring, j'ai pas fini...

j'ai un peu le meme genre d'erreur quand j'affecte quelque chose à une variable de type string et que la machine me dit que j'ai pas géré le cas ou ma chaine est nulle ; le compilateur me sert bien d'habitude, mais là il me gonfle vraiment

Attention à Astérix, mon Pitt Bull
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 juin 2010 à 10:22
As-tu essayer de mettre un point d'arrêt à l'intérieur de la fonction Find pour s'il y rentrait dedans ????

Pour moi le problème ne peut pas venir de ta variable lnx.
Si elle est de type Long, elle est toujours défini à moins que tu lui assigne explicitement la valeur Nothing à moment donné. Elle ne peut pas être infini, un long ne prend jamais la valeur infini, un long a obligatoirement une valeur comprise entre -9223372036854775808 et 9223372036854775807
Le seul cas qui peut poser problème c'est si lnx = Nothing mais tu dis qu'il est égal à 11

Pour moi, le problème vient soit de Tblvaleurs qu'il n'arrive pas à convertir en System.Data.Datatable, soit se produit sur une autre instruction à l'intérieur de la fonction Find ou d'une autre fonction appelée à l'intérieur de celle-ci.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0

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

Posez votre question
cs_christoni Messages postés 140 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 1 novembre 2010 7
20 juin 2010 à 14:34
Bonjour,
Integer n'est il pas suffisant ?
Long c'est du vB6 et posera de plus en plus de problèmes selon les applications et OS.
Voir http://msdn.microsoft.com/fr-fr/library/y595sc15%28VS.80%29.aspx
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 juin 2010 à 15:32
Long c'est du vB6 et posera de plus en plus de problèmes

FAUX

Long n'est pas du tout du VB6, c'est au contraire le type de base de tous les systèmes, les autres types sont tous alignés sur le Long

Sur un système 32 bits, le type Long fait 32 bits, sur un système 64 bits le type Long fait 64 bits
Le framework .Net étant bâti sur une structure 64 bits (même sur les systèmes 32 bits) le type Long fait 64 bits.

Le type Long était défini à l'origine, par l'entier le plus grand que peut contenir un registre du processeur.

Mais il est probable qu'un Integer soit suffisant ici.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Rejoignez-nous