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 :

Requête SQL sans résultat en VBA (ADO) [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut Requête SQL sans résultat en VBA (ADO)
    Bonjour,

    j'ai un bête (?) code VBA qui effectue une requête en base.
    Quand j'exécute le SELECT avec SQL Server j'ai bien un résultat, en revanche en VBA/ADO sous Excel, j'ai "<BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel.>" si j'essaye de lire le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim cnn As New ADODB.Connection
    cnn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=" & bd & ";User ID= " & login & ";Password=" & mdp & ";Trusted_Connection=False"
     
        req_gr_id = "select GRP_ID from GROUPE where GRP_NOM = '" & entity & "'"
     
        Dim rs As New ADODB.Recordset
        If rs.State <> adStateClosed Then rs.Close
        rs.ActiveConnection = cnn
        rs.Open req_gr_id, cnn
        'rs.MoveFirst
     
        GrPeres = rs(0)
     
        rs.Close
    D'ailleurs rs.RecordCount = -1 après exécution de cette requête.

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    req_gr_id = "select GRP_ID from GROUPE where GRP_NOM = 'entity'"

  3. #3
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut
    Merci, mais c'était juste une mauvaise retranscription dans mon post en voulant simplifier, le problème n'est pas là. (j'ai corrigé le post)

    J'ai essayé avec une autre requête, sur une autre table et une autre base, même erreur.

    A noter que j'arrive dans le même programme, à appeler des procédures stockées sans problème (avec des cmd.Execute à la place des Recordset bien sûr).

    J'ai essayé de replacer le Recordset par cmd.Execute du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With cmd
            .ActiveConnection = cnn
            .CommandType = adCmdText
            .CommandText = "select GRP_ID from GROUPE where GRP_NOM ='" & entity & "'"
            .Execute
     
            GrPeres = .Parameters(0).Value
       End With
    mais c'est pareil : 0 résultat, alors que si je fais un copier-coller du .CommandText pour l'exécuter dans SQLServer ça marche !

    Donc je suppose que ce n'est pas un problème au niveau de la requête elle-même mais plutôt au niveau des paramètres de la connexion ???

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    As tu essayé en spécifiant le nom de la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cnn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=" & bd & "; DATABASE = MABASE ;User ID= " & login & ";Password=" & mdp & ";Trusted_Connection=False"
    Ou dans la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CommandText = "select GRP_ID from MABASE.dbo.GROUPE where GRP_NOM ='" & entity & "'"
    Jérôme

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Bonjour

    peut-^tre (...) supprimmer trusted connection

    source
    http://www.connectionstrings.com/sql-server#p6
    Michel_M

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Bonjour

    peut-^tre (...) supprimer "trusted connection"

    source
    http://www.connectionstrings.com/sql-server#p6
    Michel_M

  7. #7
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut
    Merci à vous 2, c'est la 2e réponse de jfontaine qui est la bonne : ma requête ne fonctionne que si j'indique base.dbo.table dans la requête. Le nom de la base dans la chaîne de connexion ne suffit pas (contrairement aux appels de procédures stockées bizarrement).

    Et s'est greffé à ça un 2e problème que j'ai fait apparaître en essayant de comprendre le 1er :
    j'avais ajouté un test "if rs.RecordCount > 0" pour ne pas planter le programme à chaque passage mails il retourne toujours -1 !
    Du coup, même après correction du 1er problème, je ne récupérais jamais les résultats de mon SELECT.
    D'après http://support.microsoft.com/kb/194973/en-us c'est un problème connu : j'ai donc ajouté "adOpenStatic" (même si je n'ai pas bien compris sa signification ) et ça fonctionne.

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Il me semble qu'avant le RecordCount il faut faire un MoveLast.
    C'est a tester
    Jérôme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2002] Requète SQL dynamique en Excel VBA.
    Par cotmar dans le forum Excel
    Réponses: 2
    Dernier message: 23/12/2009, 19h11
  2. "Lire" une requête SQL sans contacter le serveur ?
    Par Kharski dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/09/2008, 16h42
  3. [VBA et SQL] Requête SQL utilisant une variable VBA
    Par Altrensa dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 06/07/2007, 10h23
  4. Requête SQL Direct à partir de VBA
    Par petitmic dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 25/05/2007, 17h35
  5. Requête MySQL sans résultat...
    Par x86-master dans le forum Installation
    Réponses: 13
    Dernier message: 10/12/2005, 14h19

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