J'ai une feuille de calcul Excel qui doit effectuer un certain nombre d'appels vers un serveur MySQL. Voici le code VBA, simplifié pour illustrer ce problème :
Public Function Connect() As ADODB.Connection
Dim cn As New ADODB.Connection
With cn
.ConnectionString = "<Server>"
.Properties("Initial Catalog").Value = "<DB>"
.Properties("User ID").Value = "<User>"
.Properties("Password").Value = "<Password>"
.CommandTimeout = 1500
End With
Set Connect = cn
End Function
Public Sub TestSProc()
Dim cxn As ADODB.Connection
Dim cmd As New ADODB.Command
Dim p1 As ADODB.Parameter
Dim p2 As ADODB.Parameter
Set cxn = Connect()
cxn.Open
Set cmd.ActiveConnection = cxn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "OutParamTest"
Set p1 = cmd.CreateParameter(, adBoolean, adParamOutput)
Set p2 = cmd.CreateParameter(, adVarChar, adParamOutput, 255)
cmd.Parameters.Append p1
cmd.Parameters.Append p2
cmd.Execute
MsgBox "Result: " & p1.Value & " / " & p2.Value
End Sub
Cette opération exécute la procédure stockée suivante :
CREATE PROCEDURE `OutParamTest`(
OUT `isAvailable` BIT,
OUT `remarks` VARCHAR(255)
)
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SET isAvailable = false;
SET remarks = 'The quick brown fox jumps over the lazy dog.';
END
Sur ma machine, et pour presque tous les utilisateurs, ce retour :
Résultat : Faux / Le renard brun et rapide saute par-dessus le chien paresseux.
Mais pour un l'utilisateur, il revient :
Résultat : Vrai /
La seule différence que je peux trouver entre ma machine et celle de l'utilisateur est la version des pilotes MySQL ODBC 5.3 ANSI et Unicode. J'ai la version 5.03.02.00 et, à l'origine, cet utilisateur avait une version plus ancienne. Je lui ai demandé de faire une mise à jour, et il a maintenant la version 5.03.09.00 (plus récent que le mien), mais le problème persiste.
Y a-t-il quelque chose qui m'échappe ? Existe-t-il une sorte de variable de configuration au niveau de la machine qui pourrait causer OUT
Les paramètres cessent de fonctionner ? Ou bien OUT
ne fonctionnent que dans certaines versions de pilotes ?
UPDATE : J'ai modifié la PS comme suit :
CREATE PROCEDURE `OutParamTest`(
OUT `num` INT,
OUT `remarks` VARCHAR(255)
)
BEGIN
SET num = 12345;
SET remarks = 'The quick brown fox jumps over the lazy dog.';
END
Et a effectué les modifications correspondantes dans VBA. Maintenant, sur ma machine, le message revient :
Résultat : 12345 / Le renard brun et rapide saute par-dessus le chien paresseux.
Et sur la machine de cet utilisateur, le message s'affiche :
Résultat : 232718680 /