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

VB 6 et antérieur Discussion :

Récupérer valeur requête SQL


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut Récupérer valeur requête SQL
    Bonjour à tous,

    J'ai crée une requête SQL sous VB6 dynamiquement à l'éxécution du programme.
    La requête a la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select A.code, B.code, C.code, D.code, ... from A,B,C,D,...
    Je souhaiterais récupérer le résultat de cette requête Sql et afficher les éléments via une MsgBox. D'habitude, j'écris la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Do while Not ConnectionBD.adoRecordset.EOF
          MesgBox ConnectionBd.adoRecordset!A.code
    Loop
    Le problème ici, c'est que je ne connais pas le nombre d'éléments retournés par ligne, en résultats. Voyez-vous comment pourrais-je procéder?

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Bonjour,

    que veux-tu faire ?

    - afficher tous les résultats dans le même MsgBox ?
    - ou avoir un MsgBox par résultat ?

    tu boucles jusqu'à la fin de tes enregistrements : quel est donc le problème ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Phifi
    Bonjour,

    que veux-tu faire ?

    - afficher tous les résultats dans le même MsgBox ?
    - ou avoir un MsgBox par résultat ?

    tu boucles jusqu'à la fin de tes enregistrements : quel est donc le problème ?
    Effectivement, je veux afficher les valeurs séparémment dans un MsgBox, puis les stocker dans un tableau.

    Le souci, comme je l'ai écris plus, c'est que je ne connais pas le nombre d'éléments retournés par ligne. La requête peut être la suivante :

    Select A.code, B.code from A,B

    Ou

    Select A.code, table2.code,C.code from A,table2,C

    etc


    Je ne connais ni le nom des tables, ni le nombre d'éléments retournés dans le select. Est-ce plus explicite?

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

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

    Tu peux utiliser ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonRecordset.Fields.Count

  5. #5
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Citation Envoyé par joquetino
    Je ne connais ni le nom des tables
    comment tu ne connais pas le des tables mais fait une requette sur cette table ??

    que veux tu exactement. Est que tu veux mettre le resultat de ta requette dans un tableau (selon un champs) mais tu ne connais pas le nombre d'enregistrement retourne pour redimensionner ton tableau ??

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par sovo
    comment tu ne connais pas le des tables mais fait une requette sur cette table ??

    que veux tu exactement. Est que tu veux mettre le resultat de ta requette dans un tableau (selon un champs) mais tu ne connais pas le nombre d'enregistrement retourne pour redimensionner ton tableau ??
    Je vais expliquer rapidement l'appli : je travaille sur une appli boursière, qui manipule des codes Sicovam. J'ai une base de données Access, dans laquelle chaque code Sicovam a eu une table (avec des données telles que le cours de l'action, ...). Le nom de la rable correspond au libellé du code Sicovam.

    J'ai donc des centaines de tables.

    Lorsque l'utilisateur lance le programme, la première chose qui lui ait demandé est de choisir un certain nombre d'actions. Il peut choisir entre 2 et un nombre indéterminés. En fonction de ça, je récupère les valeurs choisies et le Sicovam associé. Ensuite, une requête Sql me permet d'extraire certaines données. Voilà pourquoi je disais que je ne connais pas à l'avance le nom des tables qui apparaitront dans la base de données, tout dépends du choix de l'utilisateur.


    Effectivement, ce que je souhaiterais, c'est récupérer les données du recordset, les afficher dans un msgBox (c'est juste pour que je teste l'exactitude des données retournées) puis les stocker dans un tableau.

    Voilà mon souci.

  7. #7
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    bon ca veux dire que tu doit faire une requette parametrable

    et truc du genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim SQL as integer
     
    SQL = "Select * From "
     
     
    'maintenant tout depend de comment tu recupere les tables
    'bref tu devras faire un truc du genre
     
    SQL = SQL & NomTable & ","   ' ne mets pas la virgule pour la derniere table
     
    'ensuite tu executes la requete
    on va dans un premier temps se limite a sa, des que ca marche on passe au suivant d'ac ??

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Merci Sovo, mais la requête ne me pose pas de problèmes. Je récupère bien des données, mais c'est l'exploitation de celles-ci qui me pose problème, ou plutôt la récupération des données du recordset.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Je crois comprendre que c'est le nombre de colonnes du recordset qui est variable, en plus du nombre de lignes (encore que...)

    Puisque la requête (donc le nombre de tables concernées) est définie par l'utilisateur, c'est à ce moment là que tu dois mémoriser les noms des champs pour pouvoir ensuite faire une boucle exploitant ton recordset résultant.

    Montre-nous le code générant ta requête SQL

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Finalement, j'arrive à avancer grâce à vos suggestions. J'ai un dernier souci :
    j'ai enfin récupérer le nom des tables et des éléments du recordset.
    Comment passer un paramètre au recordset?

    J'ai défini une variable qui récupère le nom du champ à afficher, cette variable se nomme : var.

    Lorsque j'écris, adoRecordset!var, il cherche s'il y a une champ nommé "var" en résultat de la requête. Il ne m'interprète pas la valeur de la variable "var". Comment procéder pour cela?

    Merci encore.

  11. #11
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    bon si tu as deja la requette (parametrable) alors on passe au suivant


    tu devras recuperer le nombre d'enregistrement pour pouvoir redimensionner ton tableau

    pour cela tu peux utilise le code de pc75

    ou celui ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dim i as integer
     
    i=0
    if not rst.eof then
       rst.movefirst
       while rst.eof
           i= i+1
           rst.movenext
       wend
    end if
    'dans i tu as le nombre d'enregistrement.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par sovo
    bon si tu as deja la requette (parametrable) alors on passe au suivant


    tu devras recuperer le nombre d'enregistrement pour pouvoir redimensionner ton tableau

    pour cela tu peux utilise le code de pc75

    ou celui ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dim i as integer
     
    i=0
    if not rst.eof then
       rst.movefirst
       while rst.eof
           i= i+1
           rst.movenext
       wend
    end if
    'dans i tu as le nombre d'enregistrement.
    Merci merci, mais tout est ok pour moi, sauf pour le p'tit souci mentionné plus haut.

  13. #13
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Citation Envoyé par joquetino
    Lorsque j'écris, adoRecordset!var, il cherche s'il y a une champ nommé "var" en résultat de la requête. Il ne m'interprète pas la valeur de la variable "var". Comment procéder pour cela?
    je ne croit pas trop que soit possible. Je me suis heurte a ce probleme des centaines et des milliers de fois. mais a chaque fois rien.

    Mais je suis perneur pour une idee.

    Moi je passe des petites jongleries.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par sovo
    je ne croit pas trop que soit possible. Je me suis heurte a ce probleme des centaines et des milliers de fois. mais a chaque fois rien.

    Mais je suis perneur pour une idee.

    Moi je passe des petites jongleries.
    Après quelques recherches, j'ai trouvé mon bonheur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adoRecordset.fields(var)
    Et tout marche comme il faut

    Merci à tous.

  15. #15
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    merci c genial je garde ca.

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

Discussions similaires

  1. Récupérer la requéte sql d'un tableau croisé en vba
    Par snipeurcoq dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/07/2008, 14h14
  2. Récupérer une requête SQL dans un trigger
    Par muchmorehuman dans le forum Oracle
    Réponses: 6
    Dernier message: 23/04/2008, 11h32
  3. Récupérer une requête sql à partir d'un Form
    Par Yaponchik dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/03/2008, 10h55
  4. Réponses: 6
    Dernier message: 15/02/2007, 13h46
  5. [D5][BDE][Multibase] Récupérer les requêtes SQL d'une TTable
    Par Escandil dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2006, 14h29

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