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 :

calcul classement croissant d'un champ texte [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut calcul classement croissant d'un champ texte
    bonjour

    j'ai une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT AVANCE_CHANTIER_ENTETE.NumColonne, AVANCE_CHANTIER_ENTETE.NUM_OPE, AVANCE_CHANTIER_ENTETE.TitreColonne
    FROM AVANCE_CHANTIER_ENTETE;
    dans cette table je souhaite pour chaque opération AVANCE_CHANTIER_ENTETE.NUM_OPE avoir un classement de 1 a ..... de la colonne AVANCE_CHANTIER_ENTETE.TitreColonne sachant que les donnée de cette colonne son en format texte mais les données sont toujours saisie comme cela 01 murs; 05 toiture; 12 facade.....

    DOnc j'aimerai avoir une colonne classement qui me dise pour mon exemple pour 01 murs=1 pour 05 toiture=2 pour 12 facade= 3 ......

    donc je pense qu'il faudrai d'abord faire un classement des données par ordre croissant sur la colonne AVANCE_CHANTIER_ENTETE.TitreColonne puis affecte dans la nouvelle colonne classement je nombre du rang ou se trouve la ligne.

    qui peux m'aide??

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    On fait ça avec DCount(..), mais je pense qu'en premier lieu il faut se préoccuper de doublons.

    Requête Q_AVANCE_CHANTIER_ENTETE_TITRE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT AVANCE_CHANTIER_ENTETE.TitreColonne
    FROM AVANCE_CHANTIER_ENTETE;
    Ensuite on utilise DCount sur Q_AVANCE_CHANTIER_ENTETE_TITRE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT AVANCE_CHANTIER_ENTETE.NumColonne, 
           AVANCE_CHANTIER_ENTETE.NUM_OPE, 
           AVANCE_CHANTIER_ENTETE.TitreColonne,
           DCount("*", "Q_AVANCE_CHANTIER_ENTETE_TITRE", "TitreColonne<='" & AVANCE_CHANTIER_ENTETE.TitreColonne & "'") As Rang
    FROM AVANCE_CHANTIER_ENTETE;
    A+

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    MErci pour ta requete sa marche bien mais sa me génére un autre probléme

    Mon but est de limite dans l'etat "avancement travaux analyse croisé" a 17 colonnne sinon aprés sa plante. et j'aimerai ensuite crée un autre formulaire "avancement travaux analyse croisé2" qui me prend les colonnes de 18 a ...32.

    Avant la modif des requete qui me calcul le classement quand on imprimer sur ta touche imprimer sa marche trés bien ( page 4).

    Mais depuis que j'ai ajoute ta requete avec la modif de ma requete source "avancement travaux" l'ouverture de l'etat "avancement travaux analyse croisé" marche trés bien mais si j'ouvre l'etat "Reunion Chantier" a la page 4 j'ai rien qui s'ouvre pK..?

    je peux peux être avoir le même rendu autrement?
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    J'ai essayé de mettre l'état "avancement travaux analyse croisé" en sous-état dans un nouvel Etat.
    Impossible d'utiliser une requête SQL Directe ou une requête Analyse croisée (avec un nombre de colonnes non figé) comme source d'enregistrement pour un sous-formulaire ou sous-état.

    Avant de lier un sous-formulaire ou un sous-état à une requête Analyse croisée, définissez la propriété En-têtesColonnes de la requête
    J'ai une solution de contournement à laquelle j'avais déjà pensé il y a longtemps, mais dont je ne voulais pas parler car elle oblige à maintenir en parallèle deux requêtes.

    Pour l'état "avancement travaux analyse croisé" :
    Créer une requête "avancement travaux lignes"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT AVANCE_CHANTIER_DETAIL.LibelleEtage AS Bâtiment
    FROM [avancement_travaux_classement -18] INNER JOIN (OPERATION INNER JOIN (AVANCE_CHANTIER_ENTETE INNER JOIN ([a version] INNER JOIN AVANCE_CHANTIER_DETAIL ON [a version].NUM_OPE = AVANCE_CHANTIER_DETAIL.NUM_OPE) ON (AVANCE_CHANTIER_ENTETE.NumColonne = AVANCE_CHANTIER_DETAIL.NumColonne) AND (AVANCE_CHANTIER_ENTETE.NUM_OPE = AVANCE_CHANTIER_DETAIL.NUM_OPE)) ON OPERATION.NUM_OPERATION = AVANCE_CHANTIER_ENTETE.NUM_OPE) ON ([avancement_travaux_classement -18].NumColonne = AVANCE_CHANTIER_ENTETE.NumColonne) AND ([avancement_travaux_classement -18].NUM_OPE = AVANCE_CHANTIER_ENTETE.NUM_OPE)
    WHERE (((OPERATION.AVANCEMENT)=Yes))
    GROUP BY AVANCE_CHANTIER_DETAIL.LibelleEtage, AVANCE_CHANTIER_DETAIL.ordreligne, AVANCE_CHANTIER_ENTETE.NUM_OPE, OPERATION.AVANCEMENT;
    En fait c'est un copier/coller d'une partie de la requête Analyse croisée "avancement travaux".
    J'ai pris tout ce qui était entre SELECT et ORDER BY (=requête de regroupement).

    Faire de cette nouvelle requête la source de l'état.
    Donc on remplace "avancement travaux" par "avancement travaux lignes".
    Cette source ne sert qu'à avoir le bon nombre de lignes dans l'état.

    Au niveau de la maintenance de ta base :
    Si tu fais un changement dans la requête Analyse croisée "avancement travaux", qui modifie le regroupement (champs en plus ou en moins), ou bien si tu changes un critère de sélection, il faudra répercuter ces changements dans la requête de regroupement "avancement travaux lignes".
    Il est impératif que les deux requêtes retournent le même nombre d'enregistrements.

    A+

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    salut

    j'ai crée donc l requete "avancement travaux lignes"

    j'ai modifier dans l etat "avancement travaux analyse croisé" la source par "avancement travaux lignes"


    et modifier le code VBA de ce formulaire par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Report_Open(Cancel As Integer)
        Dim rstRequete As DAO.QueryDef
     
        Set dbBase = CurrentDb
        Set rstRequete = dbBase.QueryDefs("avancement travaux lignes")
        rstRequete.Parameters(0) = Eval(rstRequete.Parameters(0).Name)
        Set rstEnregistrement = rstRequete.OpenRecordset()
     
        'Définit le nombre de colonnes de la requête
        NbColonnes = rstEnregistrement.Fields.Count
     
    End Sub
    Mais je n'ai que les lignes par les colonnes il n'y a pas un probleme??

    et quand je regarde la requete ""avancement travaux lignes" je n'ai que les lignes? tu peux me re explique différemment ou et avec la base jointe ?

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Il ne fallait pas toucher au code

    Juste la source de l'état.

    "avancement travaux lignes" = source de l'état
    "avancement travaux" reste la requête source du code VBA.

    A+

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    Merci bcp sa marche super j'ai réalise mes 4 etat sens d'autre probléme RECO a toi

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

Discussions similaires

  1. Calcul de somme sur un champ text
    Par davelop dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/11/2010, 09h35
  2. calculs dans un champ texte
    Par khilim dans le forum IHM
    Réponses: 2
    Dernier message: 13/03/2009, 18h02
  3. Calculer la somme de tous les champs texte
    Par Maroxye dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/06/2008, 15h32
  4. Réponses: 2
    Dernier message: 20/11/2006, 22h19
  5. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 01h55

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