2016-11-10 1 views
2

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:

  1. 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é);
  2. 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:

  1. Sur le ancien ordinateur, dbTestIt() renvoie toujours 123;
  2. Sur le nouvel ordinateur, dbTestIt() renvoie des valeurs aléatoires (par exemple 51, 1936020585, 1);
  3. 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;
  4. Cela me dit que le problème est (seulement) dans le serveur MySQL sur le nouvel ordinateur (à droite?);
  5. 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?

+0

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 ??? –

+0

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. –

Répondre

2

Pour mieux localiser la cause du problème, j'ai rétrogradé le pilote MySQL ODBC 5.3.6 sur le nouvel ordinateur à la version 5.3.4 (qui est sur l'ancien ordinateur) et maintenant il fonctionne! Pour confirmer que c'est effectivement la cause, j'ai mis à jour à la version 5.3.6 à nouveau et il a échoué à nouveau.

Il semble donc que MySQL pilote ODBC 5.3.6 (publié il y a 8 mois!) A des problèmes de manipulation des paramètres de sortie d'un (local) serveur MySQL 5.7.16, peut-être seulement en combinaison avec ADODB et Windows 10.

Donc pour le moment je vais utiliser la version 5.3.4 et signaler un bug à MySQL.

+0

a signalé le bogue: https://bugs.mysql.com/83824 –

+1

Merci d'avoir pris le temps de publier vos résultats et de signaler le problème à MySQL. –

+0

On dirait que quelqu'un d'autre a également rencontré ce problème il y a 11 jours. Voir https://bugs.mysql.com/83698. –