CRASH VB insert / ODBC / DAO 3.6 / MYSQL 5.0

miseo Messages postés 3 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 17 juillet 2007 - 16 juil. 2007 à 13:11
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 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 ????


Je sais pas!!!!!


 


Merci de me répondre si vous avez une piste!!!!!

9 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
16 juil. 2007 à 13:18
Salut,

Vraiment à tout hasard :

dim sql  as string
dim mconnection as Connection

On Error Resume Next

sql ="insert into test (id) values ('1');"
mconnection.Execute sql , dbExecDirect

If err.number > 0 then MsgBox err.description: err.clear

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
16 juil. 2007 à 17:32
Salut Exploreur,
c' est plutôt
On Error Goto Err_Insert
sql ="insert into test (id) values ('1');"
mconnection.Execute sql , dbExecDirect
Exit Sub

Err_Insert:
MsgBox Err.Description
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
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...


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
miseo Messages postés 3 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 17 juillet 2007
16 juil. 2007 à 18:25
Merci beaucoup des réponses ,
J'ai déja un On error goto etiquette en début de procédure. Par contre je n'ai pas essayé le On error resume next .

j'essaye l'idée et je vous tiens au courant.
0

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

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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é .
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
16 juil. 2007 à 19:10
Salut Chaibat05,

Pfff......Tu as tout à fait raison..Mes excuses sont nécessaire..
A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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.
0
miseo Messages postés 3 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 17 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....

Merci pour vos fututrs réponses
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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.
0
Rejoignez-nous