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

VBA Access Discussion :

Recordset vide alors que la requête SQL pure marche [AC-97]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut Recordset vide alors que la requête SQL pure marche
    Bonjour,

    Je cherche à récupérer une donnée à partir d'une requête SQL simple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim sSQL_JobFName As String
    Dim oRst_JobFName As DAO.Recordset
    (...)
    sSQL_JobFName = "SELECT KPI_JOBF_NAME.JOB_FAMILY_DESC AS JOBF FROM KPI_JOBF_NAME WHERE KPI_JOBF_NAME.JOB_FAMILY_DEFAULT = "" & sJobFamily & "";"
    Set oRst_JobFName = CurrentDb.OpenRecordset(sSQL_JobFName)
    La variable sJobFamily a bien une valeur, et celle-ci est bien captée par sSQL_JobFName.
    Quand j'exécute cette requête dans une query (c-a-d via l'éditeur de query), elle marche et me retourne ma valeur.
    Pourtant, dans le code, oRst_JobFName est vide.

    Si ma requête SELECT se fait sans le WHERE, elle prend bien la liste.
    Si je ne met qu'un " , il y a une erreur de syntaxe.

    Alors, c'est peut-être la fatigue, mais je ne vois pas ce qui se passe.

    Une idée?

    Merci,

    BTB

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 701
    Points
    24 701
    Par défaut
    Bonjour,
    oRst_JobFName est bien un recordset, donc en tant qu'objet tu ne dois pas t'attendre à y trouver ta valeur. Un recordset est un ensemble de tuple et non une valeur en découlant.

    Pour lire une valeur il faut au minimum demander la valeur du champ, et dans le cas de retour multiple se positionner sur le bon enregistrement (si il existe).

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRst_JobFName.fields(0)
    Tu devrais lire le tuto sur DAO, je pense que c'est incontournable dans ta situation.

    Cordialement,

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Erf, forcément, si je mets pas la ligne de code suivante, vous risquez pas de comprendre... Désolé, j'étais crevé, hier. Voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlApp.Range("B2:B3").Value = "Synthesis CONSO Countries for " & oRst_JobFName("JOBF")
    Et donc quand le debugger s'arrête sur cette ligne, il me dit: "Run-time error '3021' : no current record"

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 701
    Points
    24 701
    Par défaut
    Bonjour,

    Je te renvoi donc sur mes 2 indications :

    ...et dans le cas de retour multiple se positionner sur le bon enregistrement (si il existe).
    et surtout :

    Tu devrais lire le tuto sur DAO, je pense que c'est incontournable dans ta situation.
    Si tu choisis de ne pas anticiper cet erreur normale, tu dois au moins la gérer.
    En plus le message est très clair. "L'enregistrement n'existe pas."

    Cordialement,

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    J'utilise ce genre de code dans plusieurs fonctions sans problème.
    Je connais les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While Not oRst.EOF
    (...)    
    oRst.MoveNext
    Wend
    et compagnie.

    J'ai précisé dans mon premier post que si je ne passais pas de paramètre au SELECT, ça marchait et que l'oRst récupérait bien la valeur - ce qui tend à montrer que le code marche, a priori, mais que dans ce cas précis il y a un problème quelque part que je n'arrive pas à identifier.
    Enfin, comme je l'ai dit la requête SQL normale récupère des données, donc le problème n'est pas aux niveau des données.

    J'ai appris à utiliser ce code grâce à ce même tutoriel, et me renvoyer vers le tutoriel entier sans m'indiquer où je peux éventuellement me tromper, ne me semble pas pertinent.
    Si tu choisis de ne pas anticiper cet erreur normale, tu dois au moins la gérer.
    Qu'est-ce que tu veux dire par là? Avec un "On Error GoTo controlerror" (que j'ai déjà) ?
    En plus le message est très clair. "L'enregistrement n'existe pas."
    Eh bien pour moi ce n'est pas clair: l'enregistrement devrait bel et bien exister, comme indiqué plus haut.

    Si c'est si évident, j'aimerais bien avoir une indication concrète d'où je peux me tromper.

  6. #6
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 289
    Points
    2 289
    Par défaut
    Bonjour

    Je pense qu'au lieu de tourner autour du pot, si l'on veut avancer, si vous voulez de l'aide, il faudrait nous donner le code complet.

    Bonne journée

    Pierre

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 701
    Points
    24 701
    Par défaut
    Puisque tu préfères la solution toute cuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT KPI_JOBF_NAME.JOB_FAMILY_DESC AS JOBF FROM KPI_JOBF_NAME WHERE KPI_JOBF_NAME.JOB_FAMILY_DEFAULT = "" & sJobFamily & "";"
    Cette chaine SQL n'est pas valide.

    Il y un tuto sur le débogage des requêtes SQL en VBA...

    Dommage ! C'est super intéressant le débogage, surtout quand le net n'est pas dispo

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Je viens de me rendre compte qu'il fallait effectivement deux " supplémentaires...
    Je suis venu ici parce que je ne comprenais pas l'erreur au debugger - quel intérêt de faire des insinuations de ce genre...?
    Je ne comprends vraiment pas la nécessité d'être aussi condescendant - si tu veux pas m'aider, rien ne t'y oblige

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 701
    Points
    24 701
    Par défaut
    Nous te fournissons tous les outils pour comprendre ton problème (tutos sur le débogage des requêtes, tutos DAO...), je te donne les pistes pour investiguer et apprendre à détecter ton problème, devenir autonome, mais apparemment seule la solution t’intéresse.

    La prochaine fois poste directement ton appli, ainsi tu gagneras encore plus de temps.

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Il faut que tu comprennes que poster ici est le dernier recours, pour moi.
    J'ai debuggué, fait des tests, cherché sur Internet, etc.
    Dans mon premier message, c'est apparent, et je dis même
    Si je ne met qu'un " , il y a une erreur de syntaxe.
    Ça veut dire que j'ai aussi cherché de ce côté, mais que quelque chose m'a échappé : il suffisait de me réorienter sur ça, comme tu l'as fait dans ton dernier message.
    Je n'ai pas besoin qu'on me donne la solution, mais qu'on m'indique ce qui peut se passer. En l'occurrence, renvoyer vers un tuto entier sans plus d'explication et en ironisant c'est l'exact opposé de me pondre la solution toute faite (d'autant plus que c'est loin d'être ce que j'ai demandé et je suis loin d'avoir pondu l'algorythme entier - un peu de bonne foi, stp) : on ne critique pas un extrême (faux en plus) pour se complaire dans un autre.
    Je ne crois pas avoir demandé la lune, et un simple coup d'oeil au reste des sujets de ce forum semble aller dans le sens de ma requête.

    Enfin bref. Tant pis, merci quand même pour ton message antérieur.

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

Discussions similaires

  1. [MySQL] Erreur sql alors que la requête est correcte sur mysql
    Par toshiro92 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/04/2009, 00h58
  2. [MySQL] Requête d'un champ vide alors que dans la base ce champ est non vide
    Par lex_22 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/04/2008, 00h29
  3. Réponses: 2
    Dernier message: 27/07/2007, 17h37
  4. [MySQL] réponse vide alors que le champs existe dans la table, sans retour d'erreur
    Par ben_skywalker dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/02/2007, 15h20
  5. Recordset vide alors que la requete renvoie des valeurs
    Par lepiou dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/06/2006, 11h36

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