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

Requêtes et SQL. Discussion :

Requete présentation en ligne


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Requete présentation en ligne
    Bonjour à tous,

    Une petite question

    Je dispose d´une base de donnée que je ne peux pas modifier. Je fais une requete où une TABLE 1 est reliée une TABLE 2 par le paramètre INFO_1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE 1   TABLE_2
    INFO_1     INFO_1
    INFO_2     INFO_3
    Je lance une requete pour obtenir une liste des parmètres INFO_2 et INFO_3 et j´obtiens une réponse de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INFO_2        INFO_3
    A             1
    A             10
    A             23
    B             5
    B             75
    C             17
    D             14
    D             29
    J´aimerais cependant présenter cela comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INFO_2   INFO_3   INFO_3       INFO_3
    A             1             10             23
    B             5             75	
    C             17		
    D             14           29
    Quelqu´un a une idée ?
    Merci beaucoup !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 371
    Points : 23 845
    Points
    23 845
    Par défaut
    Access ne fait pas cela nativement et même avec du VBA cela ne va pas être très simple.

    1. Sais-tu combien de fois au maximum Info_3 se répete
    2. Si oui, est-ce au plus 254 fois ?


    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Salut !

    Merci pour ta reponse.

    le nombre max est de 7. Donc c est largement faisable dans xls. Et le code vba est fait, c est pas trop compliqué. Mais je l ai fait pour excel, je ne sais pas implementer dans Access.

    J aimerais bien avoir cette présentation directement depuis access. la requete n est pas pour moi, mais pour des personnes qui manipulent ces outils avec quelques difficultés.

    Ou sinon peut- on appeler une requete access depuis vba, recuperer le tabelau de resultats et le manipuler ? Si oui comment ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 371
    Points : 23 845
    Points
    23 845
    Par défaut
    Certaines choses simples en Excel ne le sont pas forcément en Access et vice-versa.
    Par exemple calculer la ligne précédente + 1 en Excel est d'une simplicité enfantine mais le faire en Access est ùn peu plus complexe.

    Pour en revenir à ton sujet.

    Voilà comment je procéderai :

    1. Créer une table vide qui recevra les résultats (pour la cause appelons la "Resultat") (1 seule fois)
      La table Resultat aura donc 8 champs (1 champ Info2, 7 champs Info3).
    2. Vider la table Resultat (à chaque fois)
    3. Ensuite remplir cette table avec les données voulues (à chaque fois)
    4. Enfin utiliser une formulaire en mode feuille de données pour afficher le résultat. (À chaque fois)


    Requête pour vider la table resultat : rViderResultat
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Delete [resultat].* form Resultat

    Code pour remplir resultat

    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
    public sub RemplirResultat()
       dim db as dao.database:set db=cutrrentdb
       call db.querydefs("rViderResultat").execute 'Vide la table resultat
       dim rSource as dao.recorset:set r=db.openRecorset("rSourceDonneesTriées") 'Mettre à la place de rSourceDonneesTriées le nom de ta requête quii fourni les données
     
       dim rResultat as dao.recordset:set rResultat=db.openRecordset("Resultat",dbopendynaset)
       dim Info2Ref as string
       dim compteurChampInfo3 as long
     
       do while not rSouce.eof
     
           if rSource![Info2]<>Info2Ref then
              'Créer une ligne pour le nouveau résultat
              rResultat.addnew
              rResultat![Info2]=rSource![info2]
              compteurChampInfo3=1
              rResultat.update
           end if
     
           rResultat.findfirst("Info2=""" & rSource![Info2] & """")
     
           if not rResultat.nomatch() then
                 'Ajoute le Info3 au résultat
                 rResultat.edit
                 rResultat.fields(compteurChampInfo3)=rSource![Info3]
                 compteurChampInfo3=compteurChampInfo3+1
                 rResultat.update
              else
                 error 5 'Cas impossible (Error 5 est mon erreur préférée pour signaler un cas impossible)
           end if
     
           Info2Ref=rSource![Info2]
     
           rSource.movenext
       loop
     
       rResultat.close:set rResultat=nothing
       rSource.close:set rSource=nothing
       set db=nothing
    end sub
    A+

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 371
    Points : 23 845
    Points
    23 845
    Par défaut
    Note que ce code n'est pas optimisé, on pourait sans doute éviter le FindFirst à chauqe fois puisqu'on vient de créer le nouvel enregistrement mais je trouve cela plus simple de gérer la création et l'écriture de façon séparée et si tu as peux de données cela ne se verra même pas.

    A+

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    René,

    Merci beaucoup pour le temps passé à répondre, c´est très sympa de ta part! Je regarde tout cela à tete reposée, et te donne un retour.

    Bonne journée

  7. #7
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 117
    Points : 5 244
    Points
    5 244
    Par défaut
    Bonjour,

    Effectivement cette demande est contraire au principe même de constitution des bases de données (des infos le + élémentaire possible et toutes sur la même trame).

    Pour contourner le problème, est possible d'utiliser une fonction auxiliaire pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'c est le champ texte à chercher, n le n° d'occurrence dans la table
    Public Function Get_info(c As String, n as integer)
    Dim rst As DAO.Recordset, i as integer
    get_info=null 'ou "" au choix
    Set rst = CurrentDb.OpenRecordset("SELECT info2 FROM table2 WHERE info1='" & c & "' order by 1;", dbOpenSnapshot)
    i=0
    while not rst.eof
      i=i+1
      if i=n then get_info=rst!info2
    wend
    rst.Close: Set rst = Nothing
    End Function
    Ensuite on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select info1, get_info(info1, 1), get_info(info1, 2), get_info(info1, 3), get_info(info1, 4), get_info(info1, 5), get_info(info1, 6), get_info(info1, 7)
    from table1 order by 1;
    Vite écrit mais une horreur à l'exécution s'il y a trop de lignes

Discussions similaires

  1. Oracle Open World 2006 - présentations en ligne
    Par SheikYerbouti dans le forum Oracle
    Réponses: 1
    Dernier message: 03/11/2006, 17h56
  2. determiner si une requete retourne des lignes
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/07/2006, 01h19
  3. [Access2k]Requete sur plusieurs ligne.
    Par Gronain dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 17h40
  4. [debutant..] Requeter les premieres lignes
    Par cciocc dans le forum Access
    Réponses: 3
    Dernier message: 17/05/2006, 23h18
  5. [servlet] requete http en ligne de commande
    Par spk4ever dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 12/05/2006, 09h23

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