J'ai essayé (presque) tout pour isoler le problème, mais je suis perdu.Paramètre de sortie des procédures stockées MySQL via ADODB dans MS Access (VBA) correct sur un ordinateur et aléatoire sur un autre
J'ai une application MS Access qui utilise ADODB pour s'interfacer avec une base de données MySQL locale. Je l'ai copié sur un nouvel ordinateur, mais maintenant les paramètres de sortie des procédures stockées contiennent une valeur aléatoire à chaque fois (si cela est fait via ADODB). Lorsqu'ils sont exécutés dans MySQL WorkBench, les paramètres de sortie sont corrects.
Voici les spécifications des 2 ordinateurs:
- ancienne: Windows 7 Pro, Office 2010 ProPlus, MySQL ODBC 5.3.4, serveur MySQL 5.6.22 (tous sont 64 bits; 32 ODBC-bit est également installé);
- nouveau: Windows 10 Pro, Office 2016 ProPlus, MySQL ODBC 5.3.6, le serveur MySQL 5.7.16 (tous sont 64 bits, sauf MS Office, ODBC 32 bits est également installé).
Pour isoler le problème, je la procédure stockée simple suivante:
CREATE PROCEDURE `testit`(
OUT iTest INT(11))
BEGIN
SET iTest = 123;
END
Et un test base de données MS Access ne contenant que le code VBA suivant (et une référence à la Microsoft ActiveX Data Objects 6.1 bibliothèque):
Public Function dbTestIt() As Long
Dim dbConn As ADODB.Connection
Dim dbCmd As ADODB.Command
'Open new connection
Set dbConn = New ADODB.Connection
dbConn.ConnectionString = "Driver={MySQL ODBC 5.3 Ansi Driver};option=3;database=xxx;user=root;password=yyy;"
dbConn.Open
'Execute new command
Set dbCmd = New ADODB.Command
With dbCmd
Set .ActiveConnection = dbConn
.CommandTimeout = 0
.CommandType = adCmdStoredProc
.CommandText = "testit"
.Parameters.Append dbCmd.CreateParameter("iTest", adInteger, adParamOutput)
.Execute
dbTestIt = dbCmd.Parameters.Item(0).Value
End With
'Close Connection
dbConn.Close
End Function
Voici les résultats des tests:
- Sur le ancien ordinateur, dbTestIt() renvoie toujours 123;
- Sur le nouvel ordinateur, dbTestIt() renvoie des valeurs aléatoires (par exemple 51, 1936020585, 1);
- Et si je me connecte à partir du nouveau ordinateur au serveur MySQL sur le ancien ordinateur (utilisant le serveur = 192.168.1.x dans la chaîne de connexion), il renvoie toujours 123 ainsi;
- Cela me dit que le problème est (seulement) dans le serveur MySQL sur le nouvel ordinateur (à droite?);
- Cependant, si je me connecte depuis le ancien ordinateur au serveur MySQL sur l'ordinateur nouvel, il renvoie toujours 123!
Le problème semble être dans la combinaison des composants sur le nouvel ordinateur , mais qui et pourquoi? Et comment le tester?
Quelqu'un at-il des idées brillantes?
Je viens de créer une petite application VB.NET qui utilise le connecteur MySQL .NET et qui a bien fonctionné sur le nouvel ordinateur. Donc, le problème pourrait être dans le connecteur MySQL ODBC et/ou la bibliothèque Microsoft ActiveX Data Objects 6.1 en combinaison avec le nouveau serveur MySQL ??? –
Désolé, j'ai d'abord spécifié le mauvais numéro de version du connecteur MySQL ODBC sur le nouvel ordinateur. Corrigé de 5.3.4 à 5.3.6. –