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 :

Excel SQL : RecordCount = -1 pourquoi?


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut Excel SQL : RecordCount = -1 pourquoi?
    Bonjour,

    J'aimerais compter le nombre de resultat d'une requete SQL, mais j'ai toujours RecordCount = -1...

    Pourtant la requete fonctionne car j'affiche le resultat sur une feuille...

    Je n'arrive pas à régler ce problème.

    Merci de m'aider.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Bonjour,

    J'aimerais compter le nombre de resultat d'une requete SQL, mais j'ai toujours RecordCount = -1...

    Pourtant la requete fonctionne car j'affiche le resultat sur une feuille...
    Ah... Etonnant !
    Montre la ligne de code où tu utilises RecordCount (elle est probablement fautive) en nous disant où tu l'as mise dans ton code , hein ...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Ok :-)

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub RequeteClasseurFerme()
        Dim Cn As New ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL1, texte_SQL2 As String
        Dim Rst As New ADODB.Recordset
        
        'Définit le classeur fermé servant de base de données
        Fichier = ThisWorkbook.FullName
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Feuil1"
        
        Set Cn = New ADODB.Connection
        
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open (openstatic)
        End With
        '-----------------
        
        'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL1 = "SELECT * FROM [" & NomFeuille & "$] WHERE Nom = 'Beaulieu'"
    
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL1)
      
       
        MsgBox Rst.RecordCount
    
        'Ecrit le résultat de la requête dans la cellule A2
        Range("D6").CopyFromRecordset Rst
        
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
    
    End Sub
    Merci d'avance !

    A noter que le souci est à la ligne en gras, j'éssaye d'afficher le RecordCount.

    Donc :


  4. #4
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Hmm.. Je crois qu'il faut que tu fasses d'abord un moveLast et ensuite un moveFirst de ton recordset pour initialiser ton recordCount

  5. #5
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Oui je sais c'est ce qui ce dit sur le net...

    Sauf que quand je le fait j'ai une erreur et notement sur le MoveLast...

    Le message dit :

    "L'ensemble des lignes ne prend pas en charge les récupérations arrière."

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Cela ressemble assez à un mauvais choix de curseur.

    Où se situe exactement le classeur dont tu parles ici :
    la feuille dans le classeur fermé
    ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Je ne comprend pas ta question...

    Et je fais ces manipualtion le classeur ouvert, il y à marqué des truques car pour le moment j'ai fait un copié collé du lien que l'ont ma conseillé un peut plus haut...

    Sinon, cette feuille ce trouve dans mon classeur... et le chemin du classeur est :

    Et ma requete sans le count fonctionne bien car j'affiche les resultat de la requete en D6...

  8. #8
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Bonsoir
    remplace cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rst = Cn.Execute(texte_SQL1)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'créer l 'objet Recordset et récupérer les enregistrements
              rst.Open texte_SQL1 , cn, adOpenStatic

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Salut, Abed_H

    Content de voir qu'on commence à s'intéresser au choix du curseur.

    C'est à mon avis le 1er pas ...

  10. #10
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Salut à toi ucfoutu
    et merci pour votre......!
    Bonne nuit.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Ok ça fonctionne, mais que signifie "Position du curseur"??

    Et quelle est la diférrence entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Rst.Open texte_SQL1, Cn, adOpenStatic
     
    Et
     
    Set Rst = Cn.Execute(texte_SQL1)
    Merci !
    Bonne nuit !

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    De quoi parles-tu ?
    AddOpenStatic définit un mode de curseur qui fait que ce dernier concerne une copie statique du jeu d'enregistrements.
    Ceci te permet de jouer plus proprement avec les mouvements du curseur. Avec quelques inconvnients, mais pas dans ton cas de figure puisque tu établis un recordset à chaque fois et qu'il est fait sur la base des données d'une feuille.

  13. #13
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Ok, Merci beaucoup !

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

Discussions similaires

  1. VBA excel <-> SQL Server 2005, login failed
    Par spirit69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/03/2008, 11h38
  2. problem de syntaxe pour excel sql
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/01/2008, 19h26
  3. problem de syntaxe pour excel sql vba
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/01/2008, 14h32
  4. sql + recordcount bug ?
    Par bullrot dans le forum C++Builder
    Réponses: 14
    Dernier message: 12/12/2007, 21h52
  5. [excel > sql] effectuer requete d'insertion
    Par kiki93 dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/02/2005, 15h30

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