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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut [access 2000] comment faire une requete SQL sur une autre requete en VBA
    salut,
    voilà le problème que j'ai: j'ai une requete "reqDonateurEtage2DateMontant" qui me fait un tri en fonction d'élément sur formulaire
    J'essai d'y faire une requete SQL mais je n'y arrive pas du tout, la dernière ligne de code me créer une erreur de conversion de type et comme je ne comprend pas vraiment tout se que je marque je cherche a comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim oDb As DAO.Database
        Dim requete1 As DAO.QueryDef
        Dim result As DAO.Recordset
        Dim sSQL As String
     
    Set oDb = CurrentDb
    Set requete1 = oDb.QueryDefs("reqDonateurEtage2DateMontant")
     
    MsgBox requete1.Fields(46).Name
     
    sSQL = "Select requete1.Fields(46) From reqDonateurEtage2DateMontant"
    Set result = requete1.OpenRecordset(sSQL)
    Le msgBox me resort le nom de la colonne sur laquel je cherche à faire ma requete (ca fonctionne)
    Par contre mon SQL ne passe pas du tout


    PS: le code provient de la FAQ mais modifier pour ma base sauf les 2 dernière lignes

  2. #2
    Membre habitué Avatar de RGShoop
    Homme Profil pro
    Freelance
    Inscrit en
    août 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Finance

    Informations forums :
    Inscription : août 2005
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Salut,

    Il n'y a pas de clause "WHERE" dans ta deuxième requete, du style :

    "SELECT Requête1.Champ1, Requête1.Champ2 From requete1 where requete1.Fields(46)=TaValeurRecherchée;"

    A+ RGshoop

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    non ca n'est pas ca.
    Si je souhaite faire juste une sélection de cette colonne sans clause where je doit pouvoir le faire.
    Mais meme avec il me dit toujours qu'il y a un problème de conversion de type

  4. #4
    Membre éprouvé Avatar de BrunoM45
    Homme Profil pro
    Assistant de Gestion - Responsable Informatique
    Inscrit en
    juillet 2003
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Assistant de Gestion - Responsable Informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : juillet 2003
    Messages : 783
    Points : 1 036
    Points
    1 036
    Par défaut


    Ton problème vient de ce que tu demandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "Select requete1.Fields(46) From reqDonateurEtage2DateMontant"
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "Select " & requete1.Fields(46) & " From reqDonateurEtage2DateMontant"
    Là, ça devrait marcher
    Vous avez la solution à votre problème, pensez au tag :
    est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses.

    La politesse est comme le zéro, qui, sans avoir de valeur en soi, en ajoute à toutes choses.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    bin non ca n'a pas marché. Maintenant j'ai une autre erreur suite a ta modification : 3219 Opération non valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "Select " & requete1.Fields(46) & " From reqDonateurEtage2DateMontant"
    Je rapel que "reqDonateurEtage2DateMontant" est une requete que j'ai créer via l'assistant access et que je cherche a faire du sql en vba dessus

    Je sais que si je fait ca sur une Table ca fonctionne correctement mais sur une requete y veux pas.
    Peut etre que si je dit que le résultat de ma requete est une table et que je travaille dessus en interne ca fonctionnnerai mais ca non plus je en sais pas le faire

  6. #6
    Membre éprouvé Avatar de BrunoM45
    Homme Profil pro
    Assistant de Gestion - Responsable Informatique
    Inscrit en
    juillet 2003
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Assistant de Gestion - Responsable Informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : juillet 2003
    Messages : 783
    Points : 1 036
    Points
    1 036
    Par défaut Oups..
    Petit oubli

    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "Select " & requete1.Fields(46).Name & " From reqDonateurEtage2DateMontant"
    Si : MsgBox requete1.Fields(46).Name
    te retourne bien le nom de ton champ que tu veux utiliser dans la requête 2

    Voilà
    Vous avez la solution à votre problème, pensez au tag :
    est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses.

    La politesse est comme le zéro, qui, sans avoir de valeur en soi, en ajoute à toutes choses.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    retour au point de départ
    ERREUR : 3421 erreur de conversion de type de donnée sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set result = requete1.OpenRecordset(sSQL)
    Result est de type DAO.recordset (c bien ca qu'il faut ???)
    requete1 de type DAO.querydef

    ps: au passage y sers a quoi le "set" ? (meme avec les tuto g po compris )

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    j'ai trouver un problème du meme genre que le mien (en plus c plus ou moin se que je veux faire)
    http://www.developpez.net/forums/sho...omme+requ%EAte

    La différence c que moi je n'affiche pas le résultat de ma requete. La requete sur laquel je cherche a travailler est le 2ième étage de ma requete global (y en a 3 au total, ca me permet de faire des requetes complexe et un débugage plus facile)
    Je veux donc pouvoir travailler sur les info fournit par cette requete et le tout en interne évidement

    Comme par la suite je vais ajouté des critères en vu de faire des sommes plus spécifique je pensai passer par le SQL

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    juin 2003
    Messages
    1 227
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : juin 2003
    Messages : 1 227
    Points : 1 531
    Points
    1 531
    Par défaut
    Après ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sSQL = "Select " & requete1.Fields(46).Name & " From reqDonateurEtage2DateMontant
    met un
    A l'exécution affiche la fenêtre espion pour voir la valeur du SQL.
    Amicalement

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    hoooooooo je me marre !!!
    sSQL ne VAUT RIEN !!!!!! mais pourquoi ??!! c'est un string pourtant il ne devrait pas chercher a comprendre

    result = nothing
    sSQL = ""

    La je comprend vraiment plus rien

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    juin 2003
    Messages
    1 227
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : juin 2003
    Messages : 1 227
    Points : 1 531
    Points
    1 531
    Par défaut
    J'espères que tu n'a pas oublié comme moi le " de la fin !

    Essai sur un autre field. requete1.Fields(45).Name par exemple.
    Amicalement

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    non je ne l'avai pas oublier.

    Par contre j'ai chercher à modifier le FROM de mon sql, à la place de <reqDonateurEtage2DateMontant> j'ai mis <requete1> et <toto> (toto n'existe pas ni en table ni en requete)
    dans TOUS les cas j'obtient le même résultat

    ma dernière ligne est mise en débugage avec le problème de conversion et sSQL tout vide

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    juin 2003
    Messages
    1 227
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : juin 2003
    Messages : 1 227
    Points : 1 531
    Points
    1 531
    Par défaut
    J'avais dis une bétise ici
    A l'exécution affiche la fenêtre espion pour voir la valeur du SQL.
    c'est la fenêtre d'exécution. Et là la valeur du sql doit apparaitre.
    Amicalement

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    lol t'inquiète c se que j'avai déjà fait avec F9
    et j'ai regardé dans la fenetre d'exe

    Par contre je me suis trompé de ligne!!!
    dans le sSQL il y a bien le nom de la colone que je veux dans le SQL

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    juin 2003
    Messages
    1 227
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : juin 2003
    Messages : 1 227
    Points : 1 531
    Points
    1 531
    Par défaut
    Bien.

    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set result = requete1.OpenRecordset(sSQL)
    c'est plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set result = oDb.OpenRecordset(sSQL)
    ensuite puisque la source du sSQL est une requête, il faut l'ouvrir pour disposer de la collection de données. Donc avant le Set Result il faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenQuery "reqDonateurEtage2DateMontant", AcViewNormal
    Carrément à la fin
    te donne une valeur normale.

    Voila
    Amicalement

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    bin non ca ne marche toujours pas mais par contre l'erreur a changer.
    Je met le nouveau code suite aux modif que j'ai faite avec vos renseignements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim oDb As DAO.Database
        Dim requete1 As DAO.QueryDef
        Dim result As DAO.Recordset
        Dim sSQL As String
     
    Set oDb = CurrentDb
    Set requete1 = oDb.QueryDefs("reqDonateurEtage2DateMontant")
     
    MsgBox requete1.Fields(46).Name
    DoCmd.OpenQuery "reqDonateurEtage2DateMontant", acViewNormal
    sSQL = "Select " & requete1.Fields(46).Name & " From reqDonateurEtage2DateMontant"
     
    Set result = oDb.OpenRecordset(sSQL)
    sSQL me traduit correctement la requete que je veux (le string est ok)
    l'erreur que j'ai maintenant c : 3061 trop peu de paramètres. 20 attendu
    sur la dernière ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set result = oDb.OpenRecordset(sSQL)

  17. #17
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    mars 2005
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : mars 2005
    Messages : 510
    Points : 676
    Points
    676
    Par défaut
    bonjour,

    J'ai lu le post mais je ne comprends pas toute l'astuce de ce que tu veux faire.

    En effet tu as une requête qui doit te revoyer une liste de champs triés selon un autre formulaire. Puis tu veux refaire une requête pour obtenir seulement 1 champs de cette requête. Est-ce bien nécessaire car j'ai bien l'impression qu'access va de toute façon ouvrir tout ton recordset puis tu refais un query pour avoir seulement 1 champs.

    Pourquoi ne pas sélectionner directement le champs que tu veux à partir du recordset. (pour un formulaire ou autre)

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    je sais que mon code actuel ne sers a rien mais je m'en sers pour les tests. Je fait ca en vu de pouvoir créer des requete SQL plus complexe que je n'arrive pas a faire via les assistants access.

    Sur la requete déjà créer je vais chercher à y faire 4 ou 5 requete différentes avec des critère tous différents. Les faire via SQL serai plus simple pour moi et serai moin foulli.

    Donc pour le moment je cherche a faire fonctionner quelque chose de simple.
    Je pensai que ca serai simple de faire uns requete SQL sur une autre requete mais j'arrete pas d'avoir des erreurs qui apparaisse. Le truc c que si je fait une requete du meme genre sur une table tout fonctionne nikel, mais sur une requete ca veux pas passer.

    La dernière erreur est : "trop peu de paramètre, 20 attendu" , je l'ai déjà vu plusieurs fois mais j'ai pas encore réussi à le résoudre

    au fait je vient juste d'y pensé mais je boss sous access 2000 je ne pense pas que se soit pas le problème mais on sais jamais ....

  19. #19
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    mars 2005
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : mars 2005
    Messages : 510
    Points : 676
    Points
    676
    Par défaut
    j'ai essayé pour voir

    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 rst As Recordset
    Dim db As Database
    Dim Ssql As String
    Dim result As Variant
     
    Set db = CurrentDb
    Ssql = "Select CategoryName From R_Cat"
    Set rst = db.OpenRecordset(Ssql, dbOpenDynaset)
    rst.MoveFirst
    While Not rst.EOF
        result = rst("categoryname")
        rst.MoveNext
    Wend
    R_Cat est un requête le "CategoryName" est un nom du champs retourné par la requête et je n'ai aucun problème pas la moindre erreur.

    R_Cat est une requête sélection sur une table avec la clause Where.

    donc A priori çà devrait fonctiooner sans autre

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    bon je croit que je vais le mettre en Délestage.
    Même ton code tout simple ne passe pas, j'ai chercher à le faire avec une requete toute simple et ca n'est pas passer non plus. Il me dit 16 ou 20 attendu.
    Ca doit peut etre venir de ma version ou je ne sais koi. Je vais chercher une autre méthode mais bon ca m'embète vraiment de ne pas pouvoir faire un truc aussi simple

    Je regarderai encore voir si quelqu'un a trouver un truc magique mais là franchement

    Merci a tous de m'avoir aidé !!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2008, 15h26
  2. requet sql sur une BD access
    Par k_boy dans le forum C++/CLI
    Réponses: 1
    Dernier message: 25/09/2007, 17h27
  3. Réponses: 11
    Dernier message: 02/06/2006, 12h35
  4. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 15h00

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