|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 86 ![]() |
Bonjour,
Je bloque sur la syntaxe d'une requête pour laquelle je voudrais utiliser la fonction RechDom(). J'ai regardé le tuto sur les fonctions de domaines qui m'a bien aidé pour la fonction SomDom(), un peu partout sur le net, mais là je sèche un peu Mon contexte: Je recherche l'occupation majoritaire d'une parcelle qui est divisée en "SUF" (1 parcelle = 1 à n SUF) Donc pour simplifier j'ai une table SUF composée de : - ID_SUF (Texte) clé primaire - ID_PARC (Texte) - Surface (Surface de la SUF) (Numérique) - TYPE (occupation de la SUF Près, vignes ...) (Numérique) un exemple : Citation:
La surface totale, OK La surface majoritaire, OK Code :
SURF_MAJO: RechDom("Max([SUF].[Surface])";"[SUF]";"[ID_PARC]='" & [ID_PARC] & " '") Code :
SURF_BATIE: CDbl(nz(SomDom("[Surface]";"[SUF]";"[ID_PARC] ='" & [ID_PARC] & "' AND [TYPE]=13");0)) Donc je suis finalement partie sur 2 requêtes : - Une première pour calculer la surface majoritaire pour chaque parcelle - une seconde qui utilise la première pour rechercher le type d'occupation en fonction de la surface majoritaire précédemment calculé mais il me revoit l'erreur "l'expression entrée comme paramètre de requête est à l'origine de l'erreur suivante : impossible pour MS Access de trouver le nom SUF_MAJO entré dans l'expression" Pour une premier test j'ai utilisé une valeur fixe Code :
TYPE_MAJO: RechDom("[SUF].[TYPE]";"[SUF]";"[SURF_MAJO]=1500") Citation:
Peut-on le faire en une seule requête sachant que pour obtenir le type majoritaire il faut utiliser un champ calculé sur la surface majoritaire ? |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Bonjour,
Le langage SQL a ses propres fonctions que l'on peut utiliser sur des regroupements : Code sql :
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
||
|
00
|
|
|
#3 | |||
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 86 ![]() |
Bonsoir,
Merci User pour cette réponse. effectivement ca peut me simplifier une partie de la requête Par contre je bloque toujours pour récupérer le TYPE_MAJO pour une parcelle donnée et la je ne peux pas utiliser de fonction type Max() ou autre vu qu'il faut récupérer le Type de sol associé à la SURF_MAJO En fait je le vois comme l'équivalent de la fonction RechercheV sur excel, sauf que là ca ne passe pas ... je n'arrive pas à l'appliquer Juste pour simplifier, par exemple si pour une parcelle 1 j'ai la table SUF : Citation:
Citation:
Citation:
Code :
TYPE_MAJO: RechDom("[SUF].[TYPE]";"[SUF]";"[SURF_MAJO]=" & [SURF_MAJO]) Si quelqu'un voit une autre solution, merci |
|||
|
|
00
|
|
|
#4 | ||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Salut,
Essaie ceci: Code :
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
||
|
10
|
|
|
#5 | ||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Si j'ai bien compris tu pars d'une requête qui sélectionne des parcelles. Code :
Champ calculé SURF_MAJO pour la surface la plus grande de la parcelle : Code :
SURF_MAJO: MaxDom("Surface"; "SUF"; "[ID_PARC]=" & [ID_PARC]) Code :
SURF_BATIE: CDbl(Nz(SomDom("Surface"; "SUF"; "[ID_PARC] =" & [ID_PARC] & " AND [TYPE]=13"); 0)) Code :
TYPE_MAJO: RechDom("[TYPE]"; "SUF"; "[Surface]=" & [SURF_MAJO]) Tu ne peux pas mettre un critère sur [SURF_MAJO] car ce n'est pas un champ de la table SUF. A+ |
||
|
|
10
|
|
|
#6 | |
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 86 ![]() |
Bonjour,
Merci beaucoup à vous deux de vous être penchés sur mon pb User, ta solution fonctionne en partie car j'obtiens le TYPE_MAJO mais par contre pour une seule et unique parcelle, celle qui a la SUF la plus grande parmi toutes les SUF de toutes les parcelles. Donc j'ai essayé de comprendre ce que tu me proposais mais je n'ai pas réussi à le modifier pour l'obtenir pour chaque parcelle Par contre LedZeppII ta solution fonctionne très bien. Je n'étais finalement pas très loin du vrai J'ai juste fait une modification pour le champs calculé SURF_MAJO (bcp plus simple que mon calcul) afin d'obtenir un champs numérique avec la fonction CDbl() et j'ai rajouté quelques ' et " car mon ID_PARC est en alphanumérique : Code :
SURF_MAJO: CDbl(MaxDom("Surface";"SUF";"[ID_PARC]='" & [ID_PARC] & " '")) Si je rentre une valeur bidon, la requête se lance et donne le bon résultat Par contre, si je valide sans rentrer de valeur j'ai le message d'erreur suivant Citation:
Mais en fait je suis confrontée à un nouveau problème au niveau du temps de traitement J'avais fait une base test de quelques enregistrements pour faciliter la création des requêtes Maintenant en voulant les utilisant sur ma base de travail, je ne pensais pas que cela ferait planter Access car j'ai plus de 70 000 lignes à traiter J'ai également réduit le nombre de lignes en ne travaillant que sur 1 commune (certaines ont 7 500 lignes d'autres 35 000 lignes) car j'en ai 8 au total mais même là Access ne répond plus je suis carrément obligée d'arrêter le processus ... Y aurait-il une solution pour faire / accélérer le traitement ? passer carrément par un module ? Encore merci pour votre aide |
|
|
|
00
|
|
|
#7 | |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Citation:
Pourrais tu la recopier et la tester une nouvelle fois parce que avec le : Tu ne devrais pas avoir le problème que tu mentionnes... A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 86 ![]() |
Bonjour User,
Effectivement, gros mea culpa, j'ai retesté et je retrouve bien la surface majoritaire par parcelle .. pourtant il me semblait bien avoir fait un copier/coller de ce que tu me proposait vendredi. C'est même pour cela que j'ai fait quelques recherches ce weekend avant de répondre car je ne comprenais pas pourquoi je n'obtenais qu'une parcelle au final. L'essentiel c'est que cela fonctionne, merci. Mais en même temps, j'ai toujours autant de mal à traiter mes données niveau rapidité de traitement. Rien que l'affichage du résultat met au moins 15s, autant de temps dès que je veux vérifier quelques enregistrements. Donc j'avais pensé créer une requête création de table mais je n'arrive pas à savoir si la requête est en cours ou si c'est un plantage, donc je termine le processus J'ai même testé l'export en .dbf et j'ai à peine sorti 3500 lignes en 15min ... j'ai tenté le copier/coller directement mais pareil, l'ordi rame ... je suis pas rendu pour les 37000 lignes que j'ai à traiter après regroupement. Je crois que je commence à voir les limites d'Access ... Quelqu'un aurait-il une piste à étudier ? Sachant que je dois prioritairement utiliser Access, mais si une autre solution est à envisager je peux aussi m'y pencher. Merci |
|
|
00
|
|
|
#9 | ||||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
C'est normal que ce genre de requête soit peu performante. Chaque fonction de regroupement domaine (MaxDom, SomDom, RechDom) est une sous-requête. Essaie de voir le temps qu'il faut pour 3 x 32700 requêtes. Ceci dit, passer par une table intermédiaire (voir même plusieurs) peut améliorer les performances. Première requête pour créer une table SUF_TMP : Code :
Deuxième requête pour le type de la surface majoritaire, et son id : Code :
|
||||
|
|
10
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 86 ![]() |
Bonjour,
Merci beaucoup pour ce complément. Effectivement ce n'est pas le plus pratique niveau rapidité. J'avais déjà lancé un export en txt que j'ai ensuite réimporté dans Access avant ta proposition, c'est de la bidouille mais pas trop le choix. Ta solution fonctionne bien sur ma base essai mais je n'ai pas pris le temps de la tester sur ma base de travail. Je l'aurais pour le prochain coup et ca m'a aussi permis de découvrir de nouvelle fonction |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com