miseo
Messages postés3Date d'inscriptionmardi 10 juillet 2007StatutMembreDernière intervention17 juillet 2007
-
16 juil. 2007 à 13:11
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
17 juil. 2007 à 19:34
Bonjour,
Je travaille actuellement sur une application développé en VB et qui utilise la librairie DAO 3.6.Je veux executer des insertion dans une v=base de données my sql. Pour cela, j'ai une BD mysql version 5.0 et un connecteur ODBC (version 3.51).
Mon problème est le suivant:
J'arrive bien à me connecter via mon code à ma base de données.
Je réussi les select et insert avec la commande "connection.execute sql"
ex:
dim sql as string
dim mconnection as Connection
sql ="insert into test (id) values ('1');"
mconnection.Execute sql , dbExecDirect
Cependant, si ma requête sql est incorrecte (ex: valeur de trop grande par rapport à la taille de la colonne de ma table) alors la méthode execute plante et ne me rend pas la main. (vb crash!!!!)
Dans les logs de odbc,on voit bien l'erreur (SQL_NO_DATA_FOUND) mais on dirait que ODBC ne renvoie pas l'erreur à l'application VB.
Peut être que les options de ODBC ne sont pas bonnes ????
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 16 juil. 2007 à 18:09
Salut Chaibat05,
C'était pour eviter le Exit Sub et l'étiquette, le on error resume next, de ce fait si le gestionnaire d'erreur à un numéro, on affiche l'erreur et nettoie le gestionnaire d'erreur par la même occasion...
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 16 juil. 2007 à 19:02
Oui Exploreur,
mais le On error resume next ne te donnera jamais de n° d' erreur
car resume next a justement pour fonction d' ignorer l' erreur.
De ce fait tu ne sauras jamais ce qui s' est passé .
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 16 juil. 2007 à 19:29
non pas nécessaire les excuses ...
juste qu' il faut s' en rappeler.
J' ajouterais que pour le Resume Next, il faut limiter son emploi en prévision d' erreurs
probables mais "banales" et sans incident sur le reste du programme.Mais en aucun cas
quand il s' agit de choses plus "sérieures" comme l' insertion de données par exemple.
Par contre, le Goto, en plus du fait qu' il permet d' éviter le crash, permet aussi d' avertir,
de décrire et donne la possibilité de rectifier le tir.
miseo
Messages postés3Date d'inscriptionmardi 10 juillet 2007StatutMembreDernière intervention17 juillet 2007 17 juil. 2007 à 09:01
salut vous deux,
Petite précision sur mon code... (voici exactement à quoi il ressemble):
On Error Goto Err_Treatement
dim sql as string
dim mconnection as Connection
sql ="insert into test (id) values ('1');"
mconnection.Execute sql , dbExecDirect
Exit Sub
Err_Treatement:
MsgBox Err.Description
Le pb cest le suivant: quand mon code execute la commande "connection.execute", il ne me rend jamais la main.Mon process reste bloqué sur cette ligne et l'exception n'est jamais catchée. (Même chose si je change "On error Goto" par "on error Resume next")
Donc, je ne comprends pas trop!!! Peut être que le driver ODBC renvoie une erreur que l'application ne connait pas!!! Bizarre!!!!
Par contre, si je remplace sql ="insert into test (id) values ('1');" par la même requête sans le ; alors l'object mconnection comprends qu'ily a une erreur de syntaxe et l'exception est bien catché.Le plantage se produit sur une erreur sql de type mauvais taille de champ ou clé primaire déjà existante , etc....
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 17 juil. 2007 à 19:34
salut,
et désolé pour le retard...
As-tu pensé à utiliser une autre constante que dbExecDirect
mconnection.Execute sql, dbFailOnError par exemple ou autres .
Utilises l' aide pour chacune (Il y' an tellement).
Sinon essaies de apsser ta requête au sein d' une transaction.