Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2010, 15h51   #1
Membre régulier
 
Inscription : juillet 2010
Messages : 230
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 230
Points : 82
Points : 82
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 :
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 :
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
Chagui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 16h55   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 804
Points : 2 804
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 :
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()).

Citation:
"type de donnée icompatible avec le critère"
Sans doute que ta variable "contrôleur" n'est pas numérique.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 09h51   #3
Membre régulier
 
Inscription : juillet 2010
Messages : 230
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 230
Points : 82
Points : 82
Bonjour Richard_35,

Merci beaucoup pour ta réponse ! Je réponds un peu tard.. Je n'ai pas pu le faire avant.
Citation:
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
Chagui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 11h28   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 804
Points : 2 804
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 :
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 :
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".
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 10h58   #5
Membre régulier
 
Inscription : juillet 2010
Messages : 230
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 230
Points : 82
Points : 82
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
Chagui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h18.


 
 
 
 
Partenaires

Hébergement Web