IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème de requête mysql contenant un champ calculé avec group_concat


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 39
    Par défaut Problème de requête mysql contenant un champ calculé avec group_concat
    Bonjour,

    je développe une macro VBA dans Excel 2010 avec une connexion ADODB sur mysql, jusque là pas de problème, j'ai une requête mysql qui fonctionne bien dans le Brownser Mysql dans le style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select t1.semaine, t2.data, count(*) as nb, group_concat(t2.id) as nId 
    from table1 as t1 inner join table2 as t2 on t1.id2=t2.id 
    where t1.champn=45 
    group by t1.semaine,t1.data
    le résultat dans le brownser mysql est du type (n lignes, je ne donne un exemple que sur la première ligne en format csv) :
    1;"texte";5;1023,1254,2546,3512,5232

    voici mon vba :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
        Set conn = New ADODB.Connection
        With conn
            .ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=x; DATABASE=base; USER='xxx'; PASSWORD='xxx'; Option=3;"
            .Open
        End With
        Set rs1 = New ADODB.Recordset
        ChaineSQL = "Select t1.semaine, t2.data, count(*) as nb, group_concat(t2.id) as nId from table1 as t1 inner join table2 as t2 on t1.id2=t2.id where t1.champn=45 group by t1.semaine,t1.data;"
     
        With rs1
            .CursorLocation = adUseClient
            .Open ChaineSQL, conn, adOpenDynamic, adLockOptimistic
            ligne = 3
            If .EOF Then
                MsgBox ("pas de ligne à afficher")
            Else
                Do
                    ligne = ligne + 1
                    Range("A" + Format(ligne, "0")).Value = .Fields(0).Value
                    Range("B" + Format(ligne, "0")).Value = .Fields(1).Value
                    Range("C" + Format(ligne, "0")).Value = .Fields(2).Value
                    Range("D" + Format(ligne, "0")).Value = .Fields(3).Value
                    .movenext
            Loop Until rs1.EOF
            End If
        End With
        rs1.Close
        Set rs1 = Nothing
    lorsque j'exécute le code j'ai un message d'erreur sur la ligne contenant ".Fields(3).Value" : Erreur d'exécution '1004': Erreur définie pas l'application ou l'objet
    si je fait "print rs1.Fields(3).Value" dans la fenêtre d'exécution j'ai en réponse : "?????????????????"
    si je regarde en fenêtre espion "rs1.Fields(2).Value", j'ai bien 5 en value, mais pour "rs1.Fields(3).Value": je n'ai rien en value et si je développe le contenu de "rs1.Fields(3).Value" le type de value est adVarBinary en type et Datatypeenum en type et en développant Value je trouve 24 valeurs contenant chacune une nombre correspondant au code ascii de chaque caractère du résultat :
    49 48 50 51 44 49 50 53 52 44 50 53 52 55 44 51 53 49 50 44 53 50 51 50 => chaque nombre dans value(0) à value(23) ...

    J'ai essayé de faire un print de "rs1.Fields(3).Value(0)" j’ai un autre message d'erreur...

    Donc ma question : est-ce que quelqu'un sait comment récupérer le résultat de group_concat en VBA pour le mettre dans une cellule excel ?

    Merci d'avance
    Alain

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Que la réponse dans le Brownser soit ok il n'y a pas grand chose d'étonnant! Il est chez lui.

    http://www.mysql.fr/products/workbench/

    Maintenant le résultat est lié, à mon avis, à installation de mysql qui est souvent utilisé pour le web (Utf8).

    Et même si l'installation est Iso, le contenu de chaque enregistrement peut être Utf8 si les données proviennent d'une page web!
    Ce qui ne pose pas de problème si les données sont enrichi par cette même page Web.

    Il m'es arrivé de convertir en Latin1 des champs en lecture Sql et de reconvertir en Utd8 en écriture Sql!

    Un test a coup sur serait de lié une table dans Access et dans vérifier le contenu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql="select convert(champ using  latin1) from table where convert(champ using  latin1) ='toto'"
    Pour information, car ça pourrait intéresser d'autres internautes non ferrures de MySql, group_concat permet la concaténation de plusieurs enregistrement concernés par le group by.

    On ne trouve aucune fonction Sql comparable dans le dictionnaire Sql d'autres moteurs de bases de données.

    group_concat permet par exemple de retourner l'identifiant de tous les utilisateurs du groupe administrateur la ça nous retournerait de valeurs numérique séparées par une virgule. Il est fort à parier qu'Ado nous retournerait un tableau. Pour éviter cela nous serions bien obligé de Caster au format Char.

    Dans l'exemple qui nous interpel, la requête nous retourne le code ASCII de chaque valeur séparés par un virgules, à priori c'est un tableau?????

    C'est pour cela que j'opterais pour un format Utf8!
    Dernière modification par Invité ; 24/04/2016 à 12h01.

Discussions similaires

  1. Exporter 1 requête contenant des champs calculés vers Excel
    Par MaryR dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/09/2009, 19h54
  2. [MySQL] problème de requête mysql
    Par all2me dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/05/2007, 09h21
  3. Problème de requête MYSQL avec plusieurs limit
    Par Super_baloo8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/05/2007, 18h35
  4. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 19h09
  5. Probléme accent Requéte MySQL-ASP
    Par dragonfly dans le forum ASP
    Réponses: 1
    Dernier message: 30/03/2007, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo