2 votes

Les paramètres OUT ne fonctionnent pas pour certains utilisateurs

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 /

0voto

p.s.w.g Points 81433

@wchiquito a souligné que ce problème est probablement lié à MySQL Bug #83698 et même si je n'ai pas été en mesure de reproduire le même comportement ailleurs (en raison de la configuration particulière du réseau de mon entreprise et des restrictions de sécurité), je suis d'accord pour dire qu'il s'agit très probablement du coupable.

Depuis que j'ai posé cette question, j'ai réécrit la procédure stockée et la feuille de calcul associée pour renvoyer les données seulement par l'intermédiaire d'un Recordset. Ce n'est pas aussi "propre", IMO, mais au moins cela fonctionne sur les machines de tous les utilisateurs. Néanmoins, si quelqu'un peut trouver un moyen d'obtenir OUT pour fonctionner (ou si MySQL décide un jour de corriger ce bug), merci de me le faire savoir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X