#1 Wed 04 April 2007 10:40
- ChristelleD
- Participant occasionnel
- Date d'inscription: 6 Jun 2006
- Messages: 45
liens dynamiques
Bonjour,
Je travaille (sous Mapinfo 7.5) actuellement à partir d'uen base de données Access pour réaliser un atlas stat des TER. Je réalise beaucoup de sélection SQL qui ne doivent pas, dans le mesure du possible, être enregistrer en tant que table. Je fais deux premières sélection SQL pour sélectionner des données par années ou par origine/destination. Je fais une addition des données tjs en SQL puis j'associe ce résultat au fond carto. Cette dernière manip ne fonctionne pas, le message d'erreur suivant s'affiche : "vous pouvez seulement établir des liens dynamiques de jointure sur des tables".
Ma question est la suivante : que faire pour ne pas avoir ce message? Y a t-il une manip intermédiaire? Comment faire pour ne pas passer par l'étape "enregistrer tables sous"?
J'espère être clair, c'est pas gagner.
Merci d'avance.
ChristelleD
Dernière modification par ChristelleD (Wed 04 April 2007 10:45)
Hors ligne
#2 Wed 04 April 2007 12:14
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: liens dynamiques
Et oui...MI ne tolère (et n'enregistre dans ses WOR) que des reqêtes de "premier niveau"
- soit on arrive à faire en une seule requête toutes les sélections dont on a besoin
- soit on enregistre et ouvre le résultat intermédiaire à exploiter
Mais quand les données sont dans Access, le mieux est de faire depuis Access une ou plusieurs requêtes (éventuellement "création de table") et d'en utiliser le résultat dans MI. Chacun son job: les SGBDR traitent la donnée alphanumérique et le logiciel SIG se spécialise dans la donnée graphique. C'est l'idéal théorique...
Hors ligne
#3 Wed 04 April 2007 14:43
- ChristelleD
- Participant occasionnel
- Date d'inscription: 6 Jun 2006
- Messages: 45
Re: liens dynamiques
Merci pour cette réponse.
Qu'entends-tu par requête de premier niveau? Celles qui n'associent pas les données aux fond carto? Si je met tous dans une même expression, ma requête sera t-elle considérée comme une de 1er niveau? Pour associer différentes requêtes est ce qu'il suffit d'intercaler un "and" dans "where"?
Hors ligne
#4 Wed 04 April 2007 17:36
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: liens dynamiques
Premier niveau c'est l'obtention d'un premier résultat: select blabla from table1,table2 ...into resultat1
L'implication de ce résultat dans une seconde requête select blabla from tablex,resultat1...into resultat2 conduit second niveau
c'est à dire une requête qui implique une autre requête
D'où l'intérêt d'arriver direct à resultat2 en une seule requête
Je ne suis pas clair, je sais mais c'est tard
Hors ligne
#5 Fri 06 April 2007 09:23
- ChristelleD
- Participant occasionnel
- Date d'inscription: 6 Jun 2006
- Messages: 45
Re: liens dynamiques
si c très clair et je t'en remercie. G plus qu'à réfléchir...
Hors ligne
#6 Fri 04 April 2008 15:29
- Joan Alpini
- Participant occasionnel
- Lieu: Carpentras
- Date d'inscription: 3 Mar 2006
- Messages: 12
- Site web
Re: liens dynamiques
Bonjour,
Moi j'ai bien une requête de 1er niveau à formuler, toute simple en plus, et pourtant ça ne marche pas... je bosse sous MI 7.0 et j'ai le même message d'erreur !
Je m'explique :
Je veux faire une requête spatiale du type "sélectionne moi les objets de la table A qui intersectent les objets de la table B".
Je tape la formule dans selection SQL, soit : SELECT* FROM TableA, TableB WHERE TableA.Obj Intersect TableB.Obj
Et le programme me dit : "vous pouvez seulement établir des liens dynamiques de jointure sur des tables".
J'ai essayé 36 fois, en changeant l'ordre tes tables, en variant les opérateurs, en bricolant le contrôle des couches (pensant avoir oublié de rendre une table sélectionnable)..... Rien n'y fait !
Je ne travaille pas sur des requêtes spatiales d'habitude, en plus je ne suis pas hyper à l'aise avec les requêtes SQL, mais enfin là quand même... c'est pourtant pas compliqué ce que je veux faire !
Alors qu'est ce que j'ai oublié ?
Merci infiniment pour vos réponses... parce qu'en plus je suis pressé ! Je fais ça pour un collègue qui doit rendre un rapport de toute urgence, alors si vous passez par là et que vous avez une solution, merci de nous aider ;-)
Cordialement,
Hors ligne
#7 Fri 04 April 2008 16:13
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: liens dynamiques
Beuh...rien à redire à la syntaxe (peut être il manque un espace entre SELECT et *... mais ça doit être une faute de frappe ??)
Si c'est pressé, essayer:
SELECT * FROM TableA WHERE obj intersects any (select obj from TableB)
...qui ne gardera que les attributs de TableA
Hors ligne
#8 Mon 07 April 2008 15:05
- Joan Alpini
- Participant occasionnel
- Lieu: Carpentras
- Date d'inscription: 3 Mar 2006
- Messages: 12
- Site web
Re: liens dynamiques
Merci pour cette astuce ; j'ai appliqué la requête en ces termes mais ça ne marche pas non plus.
Là encore j'ai essayé plusieurs combinaisons, sans succès...
Vous y comprenez quelque chose vous ?
Hors ligne
#9 Mon 07 April 2008 15:44
- Nicolas Szlapka
- Participant actif
- Lieu: NPDC
- Date d'inscription: 20 Dec 2006
- Messages: 107
Re: liens dynamiques
Salut.
Je viens d'essayer cette requête telle quel et ça fonctionne...
Alors je ne sais pas comment vous avez fait, j'ai juste fait un copier/coller et remplacé les noms de tables. Et voilà.
C'est bizarre.
Problème de version de MapInfo peut-être ? C'est possible ça ? Pourtant ce n'est pas une grosse requête...
(ça n'arrête pas de traverser mon esprit alors je demande quand même, même si je pense que vous avez vérifié : vos tables sont-elles bien toutes "Table" ou y a-t-il une "Query" renommée ?)
Nicolas
Hors ligne
#10 Mon 07 April 2008 15:59
- Joan Alpini
- Participant occasionnel
- Lieu: Carpentras
- Date d'inscription: 3 Mar 2006
- Messages: 12
- Site web
Re: liens dynamiques
Oui, ma TableA est effectivement issue d'une requête mais je ne pensais pas que le problème pouvait venir de là ?!?
Ok, j'ai extrait les zones cultivées de la table d'occupation du sol de 1999, ainsi que certaines communes à partir de Geofla, etc.
Mais puisque j'ai bien des objets graphiques associés à une table de données tout ce qu'il y a de plus simple, où est le problème ? Qu'est ce qui lui interdit de me faire un recoupement tout bête ?
Merci beaucoup !
Hors ligne
#11 Mon 07 April 2008 17:20
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: liens dynamiques
Tout dépend: ou les requêtes de premier niveau restent à l'état de requête ou elles sont enregistrées en dur
Normalement on peut faire une requête sur une requête de premier niveau...mais si on ne peut arriver au résultat en une seule requête il est prudent, si on est pressé, d'enregistrer le résultat intermédiaire avant de lui faire subir une nouvelle requête: on sera toujours à temps de l'effacer ensuite par Table->Gestion Table->Supprimer Table...
Hors ligne
#12 Tue 08 April 2008 16:41
- Joan Alpini
- Participant occasionnel
- Lieu: Carpentras
- Date d'inscription: 3 Mar 2006
- Messages: 12
- Site web
Re: liens dynamiques
Lorsque j'ai effectué mes requêtes, je les ai enregistrées sous forme de table histoire d'être tranquille dès le début. C'est pour ça que je n'imaginais pas qu'il puisse y avoir le moindre rapport avec mon message d'erreur...
Pour tout vous dire, et pour être définitivement clair, j'ai principalement 3 éléments :
- 1 table "SMAEMV" (issue de la BD Geofla et qui correspond aux communes appartenant au syndicat mixte du coin)
- 1 table "sup_diversagri" (extraite de la BD occupation du sol et qui ne fait apparaître que les zones cultivées)
- 3 tables "classe_xyz" (extraites d'une BD sur les aptitudes agronomiques du sol")
Bien qu'issues de requêtes de 1er niveau, il s'agit bien de couches "indépendantes" désormais. Aussi je ne comprend pas votre dernier conseil au sujet de la dénomination "Table", même "sous la forme TableA"...
Merci !
Hors ligne
#13 Wed 09 April 2008 10:29
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: liens dynamiques
On fait le point ?
- soit une table graphique enregistrée en dur et compactée regroupant les trois classes d'aptitudes agronomiques du sol --> tableA
(ou 3 tables, une pour chaque classe d'aptitude ??)
- soit une autre table graphique enregistrée en dur et compactée des zones cultivées ---> table B
Si on est dans ce cas....aucune raison que la requête, sous ses deux fomes, échoue !!
Si ça échoue, nous dire ce qui diffère par rapport à ce descriptif
Si rien ne diffère....me faire passer ces fichues tables que je leur fasse entendre raison (non mais !!)
Hors ligne
#14 Wed 09 April 2008 16:08
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: liens dynamiques
Tout simple...une fois reçu les tables "fautives" par mail !!
Votre table "sup_diversagri" n'est pas une vraie table: c'est une table requête....!!
C'est une table constituée d'un sup_diversagri.TAB et d'un sup_diversagri.QRY qui, pour s'ouvrir et "exister", nécessite la présence d'une table référence (occsol) qu'elle questionne (au fait, changez les noms: des mif dans un nom de table ou de mif/mid...lourd!)
En fait vous avez fait "Enregistrer requête" alors qu'il faut faire "Enregistrer table sous..." et choisir selection ou Queryn pour avoir réellement un résultat de requête enregistré en dur en tant que table normale
Il suffit maintenant de faire "Enregistrer table sous..." et de choisir votre table requête pour obtenir une vraie table...que vous pourrez, elle, facilement intégrer à votre "fameuse" requête
Désolé de ne pas y avoir pensé plus tôt
Hors ligne
#15 Wed 09 April 2008 16:47
- Joan Alpini
- Participant occasionnel
- Lieu: Carpentras
- Date d'inscription: 3 Mar 2006
- Messages: 12
- Site web
Re: liens dynamiques
Oh mais y'a pas de mal !
C'est moi qui vous remercie pour le temps passé à m'aider sur ce coup !
Hors ligne
#16 Thu 10 April 2008 09:37
- CRIGBAB
- Participant assidu
- Lieu: Bayonne
- Date d'inscription: 14 Nov 2005
- Messages: 180
Re: liens dynamiques
Bonjour à toutes et tous
Pour apporter ma petite pierre au pb des requetes sous MI (et ce quelque soit la version).
Effectivement la jointure entre deux tables dont une au moins est déjà une table requete n'est pas possible. C'est le probleme soulevé dans ce post. Dans la terminologie MI une jointure se traduit par un select * from TableA,Table2 where.... .
En revanche la requete proposée par Maurice : SELECT * FROM TableA WHERE obj intersects any (select obj from TableB)
fonctionne quelque soit la nature des tables A et B donc TableA et TableB peuvent être des tables requetes issues d'une première sélection.
Attention toutefois lorsque l'on fait des requetes sur des tables requetes pour obtenir un nouvelle table requete MapInfo est incapable de sauvegarder dans un document WOR ce second ou nième niveau de requete. Donc ce travail ne peut être sauvegardé directement sous Mapinfo.
Pour ma part j'ai "solutionné" le pb en créant des documents MI (xxx.wor) que je complète avec un éditeur de textes en associant la fenêtre MapBasic dans la session MI. Ainsi pour chaque requete faite, je la copie de ma fenêtre MapBasic pour la coller dans mon Wor.
Lorsque je réouvre mon document ainsi modifié à la mano tout s'ouvre correctement. Attention alors de ne pas enregistrer de nouveau ce document sous MI car toutes les requetes de deuxieme niveau et plus seront perdues. Et alors plantage si vous voulez ouvrir plus tard votre document car la table issue d'une selection de second niveau est perdue et la lecture du WOR plante.
Pour Prévenir ce genre de pb j'ai complété mon WOR de ces quelques lignes.
note "cette partie est ajouté sous editeur de texte"
run program "uedit32 etude_dia_BAYCA_par_section_20080408.wor"
Add Column "SECTIONS_BAY" (Nb_DIA Integer)From DIA_util Set To Count(*) Where within Dynamic
Add Column "SECTIONS_BAY" (Nb_DIA_Habitation_nonexclue Integer)From DIA_Habitation_nonexclue Set To Count(*) Where within Dynamic
Add Column "SECTIONS_BAY" (Nb_DIA_Habitation Integer)From DIA_Habitation Set To Count(*) Where within Dynamic
Add Column "SECTIONS_BAY" (Nb_DIA_commerce Integer)From DIA_commerce Set To Count(*) Where within Dynamic
Add Column "SECTIONS_BAY" (Nb_DIA_mixte Integer)From DIA_mixte Set To Count(*) Where within Dynamic
Add Column "SECTIONS_BAY" (Nb_DIA_terrain Integer)From DIA_terrain Set To Count(*) Where within Dynamic
note "ne pas enregistrer le WOR avec Mapinfo avec le meme nom sinon ces six lignes sont perdues"
J'ai alors un Warning (note) sur le WOR puis le lancement de mon editeur de texte préféré avec le WOR en question puis un second Warning (note) qui m'averti de ne pas enregistrer sans précaution ce document.
Les Add Column sont un exemple de ce que l'on peut faire (Sections_BAY est le résultat d'une requète et les DIA_*** aussi).
Bon traitement et bonnes requètes.
JP LARTIGAU
Hors ligne