Problème appli VB - Access - MySQL [Résolu]

Signaler
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour tout le monde.

Voilà j'ai un gros problème que j'essaye de résoudre sans devoir modifier les sources (mais au pire si la seule solution est de modifier le code c'est quand même bienvenu) et je ne trouve nulle part comment je pourrais faire donc peut-être qu'ici quelqu'un pourra m'aider.

Alors voilà le contexte : Je suis dans une boîte ou une appli VB 6.0 a été développée et qui est en relation avec une base de données Access qui est mise sur le serveur de la boîte. Ma mission est de faire une migration de Access vers MySQL (car en effet la base de données Access devient vraiment trop imposante et du coup il y a des perte de performances etc.). Donc il a été décidé de garder la bdd Access existante mais dont les tables seraient des tables liées à MySQL via MyODBC (la bdd Access a été gardé tout simplement parce que l'appli en a vraiment besoin dans le sens ou il y a aussi des "requêtes" access et des "états" access dedans).

Donc l'appli VB 6.0 est censé continuer à communiquer avec la bdd Access mais toutes les operations seront ainsi faites réellement sur la bdd MySQL.

Et c'est là qu'il y a un problème. Si j'ouvre la bdd Access (le fichier .mdb donc) avec les tables liées et que je lance n'importe qu'elle requête sql, tout fonctionne parfaitement. Par contre si je lance l'application VB 6.0 attaquant la nouvelle bdd Access (avec les tables liées donc) la selection (select), l'insertion (insert) et la suppression (delete) fonctionnent sans aucun problèmes mais la mise à jours (update) plante lamentablement (mais les modification sont apportés apparement !). Et si à la suite de cela j'essaye d'effectuer une requête de mise à jours (update) à partir du fichier .mdb de la base j'ai cette fois un message m'indiquant exactement :
"Microsoft Access n'a pas réussi à mettre 0 enregistrement à jours ... blablabla ... 1 enregistrement à la suite de la violation de verrous, ... blablabla ..."

Il est donc clair que cela vient d'un verrou. Donc je me demande comment résoudre le problème. J'ai pensé à plusieurs possibles solutions je ne sais pas encore :
Sans modification de source :
- peut-être créer un trigger dans la base MySQL qui pour chaque update ferait un "UNLOCK TABLES;" avant l'exécution de la requête ?
Avec modification de source :
- peut-être ajouter des option lecture/écriture ou autres à l'objet connexion ADODB ?

Bref voilà je sollicite l'aide de personnes qui aurait peut-être eu le même problème ou qui auraient une idée de derrière les fagots parce que la ... je sèche

Merci d'avance.

6 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
salut,

la base (ancienne ou nouvelle) access étant sur un serveur, je suppose quec'est de ce poste que tu as fais les essais par access.
par contre en passant par l'appli VB6, le mode d'ouverture de la base compte. il est possible que  le verrou soit mis à l'ouverture (pour empêcher des maj d'autres utilisateurs en simultané par exemple), d'où l'erreur.

peux-tu préciser la version de la base, le mode d'accès (ado, dao, adodb "par code", etc...), la chaine de connexion etc?...

Microsoft Access n'a pas réussi à mettre 0 enregistrement (...)
tu es certain que le select retourne vraiment quelque chose de valide?
ce message semble plutôt vouloir dire "rien à mettre à jour"
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
OpenDatabase ? c'est du DAO çà..., obsolète depuis 1998
as-tu essayé en ADO?
(une classe toute prête ici)

en pas à pas, l'erreur vient vraiment juste après l'update? pas une sous-gestion d'un ON ERROR égaré?

même avec DAO, je ne vois vraiment pas comment il pourrait y avoir un message d'échec suite à une réussite.
ce n'est pas le refresh (select ensuite) qui déclenche cette erreur? genre un RS qui était encore ouvert?...

après avoir testé avec ADO (que je te conseille plus que vivement, même si tu ne voulais pas modifier le code dans la mesure du possible), tu peux éventuellement copier le code d'update et ce qui s'en suit...

bon courage
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
c'est les aléas de DAO çà....

as tu essayé en ADO?
(qui d'ailleurs rencontre parfois aussi des problèmes de count ^^)

car chaque module a sa propre connexion etc.
pour être certain.... tu es bien sous VB6, pas VBA Access n'est-ce pas?
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010

Alors les tests je les ai fait en local sur ma propre machine (tout simplement parce que pour l'instant tout le développement ne doit pas impacter le travail des personnes de la boîte) j'ai donc l'appli installé sur mon poste avec le chemin au fichier .mdb qui a été rédirigé (donc le chemin ne pointe plus sur la base de prod mais sur une base de mon poste) et le serveur MySQL est en localhost.

Ensuite, la base de données c'est une Access 2000 (pour préciser d'ailleurs j'ai aussi télécharger la dernière version du moteur Jet comme le conseillait le guide MySQL). La connexion en elle-même est de type ADODB et l'ouverture de la base se fait simplement par un OpenDatabase("chemin de la base access") apparement.

Pour le message en fait il dit qu'il a parfaitement réussi à faire l'update mais qu'il a envie de mettre le message (allez comprendre le ridicule de la situation "attention ! tout a bien marché !").
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010

Bonjour, désolé de ne pas avoir pu répondre plus tôt mais j'étais vraiment pris

Donc pour revenir à nos moutons, en fait l'appli à la base ce n'est pas moi qui l'ait développé et je ne sais pas si avec les délais que j'ai je pourrais modifier toutes les connexions (car chaque module a sa propre connexion etc.). Ce pendant j'ai un autre problème je ne sais pas si tu pourras me répondre. Est-ce qu'il se pourrait qu'une connexion DAO sur une bdd access liée à mysql engendre des problèmes au niveau des recordset ? Parce qu'en lancant l'appli avec la bdd non liée j'ai un recodset de taille 14 (avec rs.RecordCount) contenant les résultats d'un select (qui renvoie bien 14 lignes lorsque la requête est faite directement sous access avec la bdd non liée) mais en lancant l'appli avec la bdd liée j'ai un recordset de taille 1 (avec rs.RecordCount) alors que la requête renvoi bien 14 lignes si je l'exécute directement sous access avec la bdd liée ... je comprends plus rien la ...

En tout cas merci de prendre du temps pour m'aider
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010

Pour être plus précis sur ce que j'ai dit juste au dessus, en fait le rs.RecordCount me renvoi 1, mais si je fait un style de RecordCount à l'ancienne (c'est-à-dire si je parcours le recordset et que j'incrémente un compteur pour compter le nombre de ligne du rs) je tombe bien sur 14 ........ c'est magique '^^