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 :

sous Requete sélection aléatoire dans requete update. Problème de syntaxe [AC-2003]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Par défaut sous Requete sélection aléatoire dans requete update. Problème de syntaxe
    Bonjour,

    Je suis entrain de réaliser une formulaire de sélection d'enregistrements. cette sélection doit se faire de manière aléatoire. J'utilise donc une requete comme celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP " & mavariablenumerique & " * FROM matable WHERE mes conditions ORDER BY Rnd(champ)
    Je souhaite pouvoir mettre à jour un champs sur les enregistrements sélectionnés. Voici ce que j'essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim Combo As Variant  'donnée numérique + texte, ex : contrôleur 1
    Dim Nbr As String ' donnée numérique ex : 15 (=15 dossiers à sélectionner)
    Dim ComboDat As Variant ' donnée numérique, ex : 9 (9=septembre)
    Nbr = Me.Nbre.Value
    Combo = Me.choixcontroleur.Value
    ComboDat = Me.filtredate.Value
     
    UPDATE T_dossiers SET [ControleurSecond]= '" & Combo & "' 
    WHERE T_Dossiers.IDdossier IN (SELECT TOP " & Nbr & " T_Dossiers.IDdossier 
    FROM T_dossiers WHERE T_dossiers.TypeControle='Second Contrôle Admin' 
    And T_dossiers.DateAffectation= " & ComboDat & "  ORDER BY Rnd(controleur));
    Je ne suis pas sur du tout de la syntaxe de ma requête. j'ai un peu de mal avec les sous reqêtes. j'aurais bien voulu faire une reqête avec kle générateur access mais lorsqu'il y a des variables dans la reqête c'est pas très évident.

    j'ai un message d'erreur " type de donnée icompatible avec le critère"


    je me demande également si le ORDER BY Rnd(champ)) est possible


    Merci pour vos futur conseils

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Bonjour Chagui,

    J'avoue que je ne comprends trop pas ce que tu cherches à faire...

    2 rappels :
    • la fonction rnd() retourne un nombre aléatoire (http://office.microsoft.com/fr-fr/ac...001228901.aspx);
    • effectivement, ORDER BY rnd(xx) est accepté en saisie, mais ne fonctionne pas : cela voudrait dire que Access connaît, par avance, la valeur de tous les rnd() de toute la table pour pouvoir, ensuite, les trier.


    Dans ta requête, tu spécifies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY Rnd(controleur));
    Tu sembles croire que cela veut dire "rechercher, aléatoirement, un contrôleur existant". Si c'est ce que tu croies, tu croies mal (voir la définition de rnd()).

    "type de donnée icompatible avec le critère"
    Sans doute que ta variable "contrôleur" n'est pas numérique.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Par défaut
    Bonjour Richard_35,

    Merci beaucoup pour ta réponse ! Je réponds un peu tard.. Je n'ai pas pu le faire avant.
    Sans doute que ta variable "contrôleur" n'est pas numérique.
    c'était exactement ca. j'avoue ne pas avoir assez cherché sur cette fonction et un peu plus de questionnement de ma part m'aurait surement permis de trouver tout seul l'origine du problème.

    je dois utiliser cette fonction dans 2 cas :

    Mettre à jour le champ des enregistrements sélectionnés aléatoirements. En gros la perqsonne tape 15 dans un contrôle texte. Elle choisi un contrôleur parmis la liste complète (dans une combobox). Le but est donc d'attribuer 15 enregistrements (dossiers) aléatoire au contrôleur choisi.

    La deuxième raison est que je dois insérer dans une table des enregistrements aléatoires. Ces enregistrements font partie d'une table extraction contenant 4000 à 6000 enregsitrements. je dois satisfaire les exigences des comissaires aux compte. Ce lien décrit bien mon cas :
    POST ICI

    je me posais une question. Si je trie mes enregistrements aléatoirements en me basant sur un champ numérique (ORDER BY Rnd(IDdossier) dans mon cas). Est ce qu'il peut être possible d'utiliser une deuxieme fois cette fonction dans ma requete sql. Trier aléatoirement sur l'IDdossier puis trier sur le numero de dossier. Est ce que cela pourrait renforcer le coté aléatoire du tri.

    merci en tout cas pour ton aide !!

    Cordialement,

    Guillaume

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Bonjour Chagui,

    Tu veux que je te dise... je ne pensais pas que cela pouvait être possible...

    Quoiqu'il en soit, l'exemple donnée dans ton lien donne la solution et ton problème ne vient QUE du fait que "contrôleur" n'est pas numérique. En effet, rnd() est une fonction qui calcule un nombre aléatoire à partir d'un nombre donné.

    Donc, une première requête R1 (par l'assistant, puis modifier en mode SQL) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TOP 10 *
    FROM MaTable WHERE MesConditions ORDER BY Rnd(ChampNumérique)
    Ensuite, une seconde requête R2 (par l'assistant) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 1erChampDeTri, 2èmeChampDeTri, ResteDesChamps
    FROM R1 ORDER BY 1erChampDeTri, 2èmeChampDeTri
    devrait fonctionner.

    Ensuite, copier/coller, dans ton code, du SQL généré par R2 avec traitement de la chaîne de caractères pour "variabiliser" le "TOP".

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Par défaut
    Merci Richard_35 !

    Je viens de me rendre compte que je n'avais pas répondu... Tout fonctionnne très bien et je te remercie pour cela.

    Cordialement

    Guillaume

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

Discussions similaires

  1. Macro: sélection aléatoire dans liste sans redondance
    Par Mist-e-Fire dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/11/2014, 18h21
  2. [AC-2010] Sélection aléatoire dans une table
    Par Tchebichef dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 08/01/2013, 09h06
  3. [MySQL] Sélection aléatoire dans le temps
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/08/2010, 18h27
  4. [PHP 5.2] Sélection aléatoire dans un tableau
    Par kalagan_11 dans le forum Langage
    Réponses: 12
    Dernier message: 21/08/2010, 17h59
  5. Sélection aléatoire dans une BD
    Par djileuk dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/10/2008, 10h41

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