banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 smile

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 !!)  smile

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 smile
Désolé de ne pas y avoir pensé plus tôt sad

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 ! smile

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

 

Pied de page des forums

Powered by FluxBB