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

Défis Discussion :

[Exercice] "bien entourer martine"


Sujet :

Défis

  1. #21
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Je vais poster ma réponse plus tard mais je crois qu'il y a moyen de rendre encore plus général ton idée. Je vais créer quelque chose mais je ne sais pas du tout si cela sera bien

  2. #22
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    tous les coups sont permis!
    même les tordus à partir du moment que ca marche.
    Si TOUS les coups sont permis...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE table DROP COLUMN n
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE table ADD COLUMN n COUNTER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT table.*, iif([n]=4,6,iif([n]=6,4,[n])) As NewOrder
    FROM table
    ORDER BY NewOrder

  3. #23
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Friedrick> bienvenu. on attend ta création.

    Maxence HUBICHE> he bien voilà, on se rapproche.

    on peut dire que c'est une semi-solution:
    tu fais un prétraitement sql avant de lancer la requete ce qui n'empêchera pas à jpcheck d'en faire autant en vba et sur lequel il pourra rajouter une requete.
    cette solution étant facile c'est pour cela que je disais:
    Citation Envoyé par defi
    je voudrais une requete...
    et en fait qu'une seul.

    le pb dans cette solus c'est que l' 'alter table' ne pourras pas se faire à l'intérieur d'une requete.
    elle est aussi restictif: on ne peut créer de numéro automatique que sur les tables et pas sur les requetes. (c'est vrai, cela fait pas parti des restrictions de l'énoncé)

    mais l'idée est là! pouvoir utiliser un truc de ce genre:
    Citation Envoyé par Maxence HUBICHE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table.*, iif([n]=4,6,iif([n]=6,4,[n])) As NewOrder
    FROM table
    ORDER BY NewOrder
    j'imaginais moi une fonction IndiceAuto() qui pourrait s'utiliser comme ca:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT laTable.champ, IndiceAuto() as indice
    FROM laTable
    (j'ai biensur des paramètres dans IndiceAuto car il est difficile de s'en passer).
    à défaut de trouver du 100% sql.

    ce qui donne dans la solus de Maxence pour ce pb:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table.*
    FROM table
    ORDER BY iif(IndiceAuto()=4,6,iif(IndiceAuto()=6,4,IndiceAuto()))

    mais comme je l'ai dit si j'avais cette solus, on en discuterait pas là, j'aurais posté en contribution.

    toutefois j'ai un embryon qui peut, peut-être, rendre service ou ouvrir une piste vers la vrai solution de IndiceAuto().
    mais qui sait? vous allez peut être trouver vous le truc?

  4. #24
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par vodiem Voir le message
    Friedrick> bienvenu. on attend ta création.
    Et nous la tienne !

  5. #25
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    bon, je rappel: c'est pas l'idéal, mais ca peut marcher

    gard à vous! je lache l'embryon:

    pour avoir l'indice des enregistrements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public monIndice As Variant
     
    Public Function IndiceAuto(Vmax, v As Variant) As Variant
    monIndice = IIf(IsEmpty(monIndice), 1, monIndice + 1)
    IndiceAuto = monIndice
    If monIndice >= Vmax Then monIndice = Empty
    End Function
    avec le sql:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT laTable.champ, IndiceAuto(DCount("*","laTable"),[champ]) AS Indice
    FROM laTable;
    comme c'est un embryon: on touche qu'avec les yeux...
    et pour ceux qui n'ont pas écouté l'avertissement: (à exécuter) je n'ai pas testé en requête action mais cela ne devrait pas poser de pb.
    si vous le protégez en le verrouillant dans un form ca marche aussi : principe du: "touche pas à mon ..." embryon.

    donc puisque la fonction ne peut être appelée deux fois pour le même champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TABLE.*
    FROM TABLE
    ORDER BY iif(IndiceAuto()=4,6,iif(IndiceAuto()=6,4,IndiceAuto()))
    ne marche pas et donc pour résoudre le pb de martine (qui n'a aucun intérêt: je la connais même pas )
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t1.champ
    FROM laTable AS t1
    ORDER BY IndiceAutolaTable(DCount("*","laTable"),[champ]);
    avec pour fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function IndiceAutolaTable(Vmax, v As Variant) As Variant
    monIndice = IIf(IsEmpty(monIndice), 1, monIndice + 1)
    Select Case monIndice
        Case 4: IndiceAutolaTable = 6
        Case 6: IndiceAutolaTable = 4
        Case Else
        IndiceAutolaTable = monIndice
    End Select
    If monIndice >= Vmax Then monIndice = Empty
    End Function
    vous remarquerez que [champ]=v dans la fonction ne sert à rien que de déclencher la fonction.
    le compte dcount n'est là que pour avoir une relative stabilité.
    dans le cas de martine vous remarquerez que vous avez le droit d'y toucher avec vos doigts puisque l'indice n'est pas visible. (l'embryon est caché )

    j'ai essayé d'avoir un ordre par le temps mais sans succés: pas assez précis (peut être avec le code donné par LedZeppII ici ?)
    si j'ai qq idées tordues qui pourrait peut-être rendre cela plus stable, je voulais vous défiez de trouver mieux...

    donc: qui dit mieux ?

  6. #26
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par vodiem Voir le message
    j'aime bien ton truc random,

    je disais entre 6 et 4 pour simplifier mais je reste indécis sur les valeurs et sur le nombre de personnes.

    une requete un peu plus "généraliste" quoi, tu me trouve un truc comme ca?
    Heu pourtant tu mets 4 et 6 en dur dans ta solution...

    De plus tu demandes une requête et une seule, .... mais tu ajoutes du code

    Donc on n'a pas le droit à plusieurs requêtes mais on a droit à mettre du VBA; les règles ont l'air d'évoluer en fonction de ta solution.

    Et de toute façon je n'ai toujours pas compris l'énoncé dui problème qui évolue à chaque message.

  7. #27
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Donc on n'a pas le droit à plusieurs requêtes mais on a droit à mettre du VBA; les règles ont l'air d'évoluer en fonction de ta solution.
    Nope !
    On n'a pas le droit de mettre du VBA, puisue la solution VBA a été rejetée !
    Citation Envoyé par vodiem Voir le message
    Maxence HUBICHE> he bien voilà, on se rapproche.
    <<snip>>et en fait qu'une seul.

    le pb dans cette solus c'est que l' 'alter table' ne pourras pas se faire à l'intérieur d'une requete.
    D'autre part, comme tu n'as pas précisé que cela devait se faire dans un MDB, je fais un ADP, et je fais une procédure stockée, et j'adapte ce SQL à SQLServer, et ça marche en une seule 'requête'

    (tu as dit : tous les coups sont permis !)

  8. #28
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    ,

    je n'ai pas proscris le vba, à plusieurs reprise je dis même que ma solus est elle-même sql+vba.
    je disais à jpcheck qui avait fourni une solus uniquement en vba:
    Citation Envoyé par vodiem
    tu me la refais dans une requete et tu auras gagné
    les règles n'ont pas évoluées, je rappel le défi c'est toujours:
    je voudrais une requete qui me permute le 6ème enregistrement avec le 4ème à partir de cette table
    et pour arriver à répondre à cette question il faut pouvoir énumérer les enregitrements.

    Citation Envoyé par Arkham46
    Heu pourtant tu mets 4 et 6 en dur dans ta solution...
    s'il n'est pas difficile de mettre en paramètre, je répondais à la solus de random qui n'était pas souple.

    c'est un défi, et je vous remercie à chacun du temps que vous prennez pour y répondre, si vous avez mal pris les remarques que j'ai fait, j'en suis navré, seulement il y a des solus plus pertinante que d'autre, il faut donc cerner les limites de chacune.

    Citation Envoyé par Arkham46
    De plus ta solution proposée n'étant pas "stable"...
    la fonction n'est pas stable dans tous les cas de figure, mais pour ma solution et d'en d'autre cas, elle l'est.

    Citation Envoyé par Maxence HUBICHE
    D'autre part, comme tu n'as pas précisé que cela devait se faire dans un MDB, je fais un ADP, et je fais une procédure stockée, et j'adapte ce SQL à SQLServer, et ça marche en une seule 'requête'

    (tu as dit : tous les coups sont permis !)
    oui, tu as raison. j'admets en procédure stockée, ok.
    mais je n'ai pas dis que tu n'avais pas une solution seulement je remarquais les quelques restrictions.

  9. #29
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Bon, alors, si on a le droit de faire des fonctions en VBA...
    C'est plus facile !

    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
    Function Permuter(v1 As Long, v2 As Long, un_champ As Variant, NomChamp As String, NomTable As String) As Long
    '---------------------------------------------------------------------------------------
    ' Procédure : Permuter
    ' Crée le   : 07/02/2008 12:19
    ' Auteur    : Maxence Hubiche (mhubiche@club-internet.fr)
    ' Objet     : permuter deux champs
    '
    ' Arguments :   v1 - n° de la 1ère ligne à permuter
    '               v2 - n° de la 2ème ligne à permuter
    '               un_champ - mettre un champ quelconque. ceci sert à forcer le recalcul
    '                   de la fonction
    '               NomChamp - Nom d'un champ (pour compter le nombre d'enr de la table)
    '               NomTable - Nom de la table dont il faut compter les enr.
    '---------------------------------------------------------------------------------------
    '
        Static n As Long
        If n >= DCount("[" & NomChamp & "]", "[" & NomTable & "]") Then
            n = 1
        Else
            n = n + 1
        End If
        Select Case n
            Case v1: Permuter = v2
            Case v2: Permuter = v1
            Case Else: Permuter = n
        End Select
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Nom FROM Table1 ORDER BY permuter(4,6,[nom],"Nom","Table1");

  10. #30
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bjr,

    Citation Envoyé par vodiem Voir le message
    je n'ai pas testé en requête action mais cela ne devrait pas poser de pb.
    Pas évident pour une création de table avec Select Into :
    http://support.microsoft.com/kb/280049/en-us
    Mais le problème se pose dans tous les cas, le order by ne détermine pas l'ordre d'écriture des enregistrements.

    Je reste sur mes gardes pour l'ordre de lecture, je ne trouve pas de document me garantissant que l'ordre de lecture se fait dans l'ordre de stockage des enregistrements dans la table.
    (même si les tests sont concluants, rien ne me dit qu'il n'y a pas quelque part un buffer de lecture utilisé par Jet et qui va planter mon ordre de sélection une fois sur cent, de la même manière que pour l'écriture)

  11. #31
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    au vu de la complexité de l'interpréteur SQL
    http://support.microsoft.com/kb/464315/fr
    JE suppose que tu n'as pas complètement tort concernant l'ordre variable suivant certains critères...

  12. #32
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Bjr,




    http://support.microsoft.com/kb/280049/en-us
    Je reste sur mes gardes pour l'ordre de lecture, je ne trouve pas de document me garantissant que l'ordre de lecture se fait dans l'ordre de stockage des enregistrements dans la table.
    j'ai vu des exemples contraires, sur des tables conséquentes, et la documentation d'access est à ce sujet assez claire
    au hasard "les enregistrements d"une variable de type table apparaissent initialement dans n'importe quel ordre"

    un tel défi ne fait que souligner l'absence d'un compteur de ligne véritable
    dans access et l'utilité du compteur auto
    Elle est pas belle la vie ?

  13. #33
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Maxence Hubiche>
    Citation Envoyé par Maxence Hubiche
    Bon, alors, si on a le droit de faire des fonctions en VBA...
    C'est plus facile !
    je ne pensais pas que c'était difficile, d'ailleur je pensais et je pense qu'il doit y avoir plusieurs solus à ce pb.
    mais je soupconnais des solus tordues.

    j'avais aussi commencé et eu comme toi ce code puis je l'avais modifié en: (en reprenant à partir de ton code)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ FROM laTable ORDER BY permuter(4,6,[champ],"laTable")
    avec:
    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
    Function Permuter(v1 As Long, v2 As Long, un_champ As Variant, NomTable As String) As Long
    '---------------------------------------------------------------------------------------
    ' Procédure : Permuter
    ' Crée le   : 07/02/2008 12:19
    ' Auteur    : Maxence Hubiche (mhubiche@club-internet.fr)
    ' Objet     : permuter deux champs
    '
    ' Arguments :   v1 - n° de la 1ère ligne à permuter
    '               v2 - n° de la 2ème ligne à permuter
    '               un_champ - mettre un champ quelconque. ceci sert à forcer le recalcul
    '                   de la fonction
    '               NomTable - Nom de la table dont il faut compter les enr.
    '---------------------------------------------------------------------------------------
    '
        Static n As Long
        n = (n Mod DCount("*", "[" & NomTable & "]")) + 1
        Select Case n
            Case v1: Permuter = v2
            Case v2: Permuter = v1
            Case Else: Permuter = n
        End Select
    End Function
    dans le principe c'est le même que le tien un peu allégé (je n'avais pas non plus le paramètre NomChamp pour le compte)

    le traitement n'est pas très différent mais je vais expliquer pourquoi je n'ai pas fait ce choix:
    je n'ai pas opté pour static car lors d'un pb d'arrêt 'n' n'est pas initialisé et déclarer en public permet plus facilement d'accéder à 'n' pour l'initialiser ou forcer l'initialisation. (encore que l'on devrait pouvoir y accéder par le nom du module si je ne me trompe).
    j'ai renoncé à mettre le calcul du nombre d'enregistrement dans la fonction car s'il s'agit d'une requete avec jointure, cela ne marche plus, alors que si on fournit en paramètre c'est plus libre.
    j'ai renoncé au modulo, je trouvais plus satisfaisant de libérer la valeur. je trouve intellectuellement plus "propre" et satisfaisant de procéder ainsi: je crée la valeur dans la requete, je la libère après.

    Arkham46>qd je parlais de requete action je pensais pour la fonction indiceAuto pour l'énumération des enregistrements.

    mais tu as raison de souligner les limites d'exploitation de tels fonctions qui pourrait rester que dans le domaine du ludique mais je pense que dès lors que l'on part déjà sur des tables sans ordres il y a déjà du hazard et faire par exemple une permutation dans du hazard n'est pas forcemment du domaine de l'utopique.
    (je reste septique sur un décalage entre lecture et écriture.)

    l'enjeu au delà de cette exemple c'est d'avoir ce que random à clairement défini: un compteur de ligne véritable.
    ce en quoi nous pourrions avoir des requetes simplifiées (les calculs qui demande l'enregistrement n-1 par exemple, résolution de pb avec des doublons, selection de plage...)

    si ces fonctions fournissent un compteur, elles ne sont pas vraiment exploitable.
    l'insert+alter table+counter fournit un résultat plus fiable mais lourd pour l'énumération.

    alors celui qui trouveras une autre piste à la résolution de "martine" pourrait peut être résoudre aussi ces autres questions.

  14. #34
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    bonsoir, j'ai trouvé une facon de rendre l'embryon stable et viable.
    c'est pas beau à voir mais c'est stable et ca marche.
    ceci afin d'avoir un compteur de ligne.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select t2.champ, t3.valeurIndice from (SELECT t1.champ, IndiceAuto(DCount("*","laTable"),[champ]) as li
    FROM laTable t1) t2, IndiceValeur t3 where str(t2.li)=str(t3.indice)
    à partir de :
    . la fonction embryonnaire: IndiceAuto fourni dans le post précédent ici
    . d'une table [IndiceValeur] ayant pour champs: <indice>, <valeur indice> ayant pour valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    indice	valeurIndice
    1	1
    2	2
    3	3
    4	4
    5	5
    6	6
    7	7
    8	8
    9	9
    ....
    bon c'est pas terrible d'avoir une table pour ca mais il faut ce qu'il faut...
    vous remarquerez que je me suis pas foullé dans le where pour résoudre le pb de typage...

    la solus pour "martine" peut donc se faire avec des iif.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t2.champ, t3.valeurIndice
    from (SELECT t1.champ, IndiceAuto(DCount("*","laTable"),[champ]) as li
    FROM laTable t1) t2, IndiceValeur t3 where str(t2.li)=str(t3.indice)
    ORDER BY iif(t3.valeurIndice=4,6,iif(t3.valeurIndice=6,4,t3.valeurIndice))

  15. #35
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Je suis tombé sur ce fil totalement par hasard, donc désolé si je le relève d'entre les profondeurs de l'oubli.

    Si on peut tricher au point d'utiliser ADP (donc SQL Server), on peut passer par une CTE

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH c AS (
      SELECT
        CASE ROW_NUMBER() OVER (ORDER BY (SELECT 1))
          WHEN 4 THEN 6
          WHEN 6 THEN 4
          ELSE ROW_NUMBER() OVER (ORDER BY (SELECT 1))
        END AS numligne,
        nom
      FROM
        latable
      )
    SELECT nom FROM c ORDER BY numligne

    Yvan
    Une solution n'est valable que dans un contexte donné

Discussions similaires

  1. [RegEx] Extraire plus chaînes entourées de quote
    Par houpli dans le forum Langage
    Réponses: 1
    Dernier message: 27/05/2015, 16h15

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