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é ?

#1 Tue 15 January 2008 18:21

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Access <--> MapInfo pour des polygones

Bonjour à tous,

On me demande si je peux relier une base Access à une table mapinfo et que les deux restent modifiables. Oui, je sais faire ça pour des points: lancer un visu MI centré sur le point et tout et tout. C'est pas dur, il suffit d'ouvrir la table d'Access sous MI, de créer des points à partir des champs X et Y et d'ajouter un peu de code en VBA. Les modifs de l'un se répercutent sur l'autre.

Là où je coince (ce que j'ai découvert en recevant les fichiers), c'est qu'il ne s'agit pas de points mais de polygones, et que les structures des deux tables ne sont pas les mêmes (sauf un identifiant qui ne porte pas le même nom sur l'une et l'autre).
(Pour info, ces deux tables ont le même nombre d'enregistrements.)

En comparant un .tab natif de mapInfo et un .tab important des données, j'ai vu une différence notable:
Natif de MapInfo (possédant un .dat contenant les données attributaires):

Code:

Definition Table
  Type NATIVE Charset "WindowsLatin1"
  Fields 6
    Id_site Float ;
    Identifiant_site Char (254) Index 1 ;
    Numéro_site Char (254) ;
    Nom_site Char (254) ;
    ...

Prenant les données attributaires dans une table Access (n'ayant pas un .dat contenant les données attributaires vu qu'elles sont dans le fichier Access):

Code:

Definition Table
  File "ens2_av_xy.mdb"
  Type ACCESS TABLE "T_site_av_coord" Charset "WindowsLatin1"
  Fields 15
    Num_Site Float ;
    Nouv_Num Char (254) Index 1 ReadOnly ;
    ....

Vu que les données attributaires sont dans le fichier access, que le .tab lie l'un à l'autre et que le .map enregistre la géométrie, j'ai pensé remplacer le .map de points d'un fichier .tab généré par l'import de la table Access (j'ai ajouté des champs X et Y par requêtes) par le .map des polygones. Arf Arf. Ca aurai été trop facile. Les données ne sont plus reliées aux données attributaires. Du coup, impossible de faire des modifs géométriques, etc.

Bref, je cherche comment relier les données attributaires contenues dans la table Access aux polygones de MapInfo, afin qu'il soit possible de gérer les données par la suite (ajout/suppression d'objets, ...).

Vous auriez une petite idée?

Hors ligne

 

#2 Tue 15 January 2008 22:43

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Bonsoir
La méthode que j'utilise:
- On fait la jointure puis on enregistre la table requête (contenant toutes les infos cumulées requises) au format Access dans la base (sous un nouveau nom)
- Ensuite,dans Access, on substitue cette nouvelle table à celle qui existait au départ (on renomme celle-ci, on donne à la table requête le nom que portait la table d'origine et on reconstitue les relations telles qu'elles existaient - et qu'on les avait notées - car ces manip les auront "coupées")
- On a ainsi une table graphique MapInfo dont les données sont gérées dans Access et où les mises à jour de données se répercutent immédiatement
La seule contrainte c'est que la création ou la suppression d'enregistrements doit se faire dans MapInfo, pour que l'index (*.aid) qui relie graphiques et données ne soit pas perturbé
De même il faut éviter le compactage (sauf à refaire la manip d'enregistrement dans Acces et l'accrochage aux relations)
Bon courage

Hors ligne

 

#3 Wed 16 January 2008 10:48

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Euh... moi pas trop bien comprendre première étape.
Appelons T_site la table dans Access et ENS_Proposition la table MapInfo (et oui, en plus, elles ont toutes les deux des noms différents...).

- On fait la jointure puis on enregistre la table requête (contenant toutes les infos cumulées requises) au format Access dans la base (sous un nouveau nom)


Je suppose que la jointure doit se faire sous Access, non? Donc j'exporte mes données MI en un format compatible Access puis les importe sous Access. Là, je fais une requête avec la mention INTO pour créer une nouvelle table qui fait la synthese des deux.
Cette nouvelle table doit être renommée ENS_Proposition (après renommage de la table initiale).

Hic que je ne comprend pas: proposition_ENS.tab devrait toujours avoir la mention "Natif" et puiser ses données dans le .dat et non pas File"BDmachin.mbd" Type access Table "Proposition_ENS"... Faut-il modifier le contenu du .tab?


Question subsidiaire: Les deux tables doivent-elles obligatoirement posséder les mêmes champs? (à part l'ID commun) Parce qu'à l'importation dela table T_Site dans MapInfo, j'ai la mention "Erreur Microsoft Access: L'enregistrement est trop long. Impossible de préparer la table D:\...T_site.tab" Puis "Impossible de créer une table MI à partir de ce fichier. Vérifiez que ce fichier est valide et accessible en modification" Est-ce dû aux champs de type "mémo" ou d'un trop grand nombre de champs (27 champs en comptant seulement ceux non supprimables: tous ceux de T_site + celui indispensable de la table ENS_proposition)? Parce que dans les deux cas, il me semble que ça complique le schmilblik pour l'ouverture des données attributaires sous MI...

Dernière modification par Miss T. (Wed 16 January 2008 11:44)

Hors ligne

 

#4 Wed 16 January 2008 12:12

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Précisions: il y aura effectivement des problèmes ou des impossibilités si la table Access comporte des types de champs que MI refuse (mémo, champs texte de plus de 254 caractères, etc...) sad. Dans ce cas...inutile de continuer dans cette voie !!
Sinon la manip pas à pas est:
- renommer T_site dans Access ("casser" les relations, après les avoir notées) en T_site2
- de jointer (sous MI, pas sous Access) la table graphique MI avec ses attributs à la table T_site2 Access, sur la base d'un identifiant commun. On trie pour éliminer les doublons ou les inutiles, puis on enregistre cette table requête au format Access sous un nouveau nom (ici T_site). Enfin on renomme sous MI la table graphique T_site dont les attributs sont dans Access en ENS_PropositionMI (par exemple, dans ton cas)
On a alors une table graphique ENS_PropositionMI dont les attributs sont dans la table T_site Access...et il reste à recréer  les relations dans Access (et à supprimer la "vieille" table renommée T_site2)
Bien sûr tout ça est plus simple si les choses sont conçues comme ça au départ.

Hors ligne

 

#5 Wed 16 January 2008 14:03

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Bien sûr tout ça est plus simple si les choses sont conçues comme ça au départ.


Je l'aurai parié dès le début. Et honnêtement, je n'aurai pas procédé comme mes collègues...
Je te tiens au courant.
Merci pour ton aide maurice.

Hors ligne

 

#6 Wed 16 January 2008 17:34

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Après tentative, ça ne marche toujours pas. J'enrage...

Déjà, vu que la table T_site n'est pas importable sous MI, je pense que je vais tout simplement ajouter une autre table (qui contient les données attributaires initiales de la table MI) qui aura une relation de 1 à 1 avec la table T_site. Ca c'est vu.
Cette table s'appelle ENS_proposition_carto (que j'ai créée en important les données attributaires de la table MI donc même structure de données et moins de problèmes). Pour vraiment faire ce que tu m'as décrit, je l'ai renommée en ENS_proposition_carto_2.

Comme tu me l'as précisé, j'ai ouvert cette table Access dans MapInfo et ai fait la requête suivante:
Select ENS_PROPOSITION_carto_2.col1, ENS_PROPOSITION_carto_2.col2 ...
from ENS_PROPOSITION, ENS_PROPOSITION_carto_2
where ENS_PROPOSITION.NOUV_NUM_ENS = ENS_PROPOSITION_carto_2.NOUV_NUM_ENS
into Selection
Cette requête a donc sélectionné les polygones de la table MI "ENS_PROPOSITION" + les attributs de la table Access "ENS_PROPOSITION_carto_2" qui leurs correspondent.
Cette nouvelle table temporaire générée par la requête est enregistrée sous ENS_PROPOSITION_carto.TAB

Mais quand j'ouvre ce .tab avec un bloc note, il ne s'agit pas de données attributaires liées mais natives. J'ai noté aussi que
l'enregistrement se faisait par la commande suivante:
Commit Table Query2 As
"D:audreyBDCeline_mathieuENS_PROPOSITION_carto.TAB" TYPE NATIVE
Charset "WindowsLatin1"

Lorsque tu fais des requêtes avec des données attributaires provenant de données externes, la table générée par une requête enregistre non pas les données attributaires mais les liaisons avec le fichier source??

Maurice, si tu me débloques la situation, je te paie un coup... (après tout, tu n'es pas loin...)

Hors ligne

 

#7 Wed 16 January 2008 18:12

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Pardon mais ça m'embrouille un peu...
Si je comprend bien ton objectif (qui semble judicieux) est d'ajouter une table dans Access, qui gère les attributs de la table MapInfo et qui soit liéee par une relation de 1 à 1 avec la table T_site
Dans ce cas, il faut simplement enregistrer la table MI d'origine (ENS_proposition) au format Access, dans la base concernée et sous le nom ENS_proposition_carto (ou même sous le nom ENS_proposition mais en mettant la table à un autre endroit que la où réside la table MI native d'origine (ENS_proposition), tu la déplacera après)
Tu obtiens une table graphique MI dont les attributs sont gérés dans la base Access (où il faudra créer les relations de 1 à 1 avec la table T_site)
Tu peux ensuite : rapatrier cette nouvelle table à l'endroit ad-hoc (avant il faudra renommer l'ancienne table MI native), renommer cette nouvelle table (elle pointe toujourrs sur les données de la table Access pour ses attributs), etc.... Si tu renommes avant de rapatrier tu peux même garder sous son nom l'ancienne table MI native !!
Tu peux (sous MI sinon ...problèmes possibles) ajouter ou enlever des enregistrements où des colonnes dans cette table
Les requêtes ne sont utiles que pour "agréger" des colonnes de la table MI à celles d'une table Access, mais là tu n'en avais pas besoin.
Par contre il faudra bien au final que tu "voies" dans MI les attributs qui sont dans la table Access T_site...et là, comment compte tu t'y prendre ?? Je te laisse réfléchir ....

Hors ligne

 

#8 Thu 17 January 2008 10:26

Sylvain Larvor
Participant occasionnel
Lieu: Toulouse
Date d'inscription: 6 Oct 2007
Messages: 24

Re: Access <--> MapInfo pour des polygones

Bonjour

Est ce que pour enregistrer ta table mapinfo dans access tu a bien fait :
fichier/enregistrer table sous/type Microsoft access Database (*.tab)/base(tu indique celle voulu)/ok ?

Car je pense que Maurice par moment parle de cette façon d'enregistrer dans access mais je ne pense pas que ce soit ce que tu fasse ?

Mais bon je peux me tromper big_smile

Dernière modification par Sylvain Larvor (Thu 17 January 2008 10:32)

Hors ligne

 

#9 Thu 17 January 2008 11:46

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Bon sang, c'était ça.
Pour passer enregistrer la table MI sous Access, je m'évertuais à faire Table > Exporter... Alors qu'il est possible de faire Fichier > Enregistrer sous > Access (.tab).
Je n'avais encore jamais essayé d'enregistrer les tables de cette façon. En fait, ça me génère un .tab dont les données sont bien dans Access.
Trop bien.

Les seules données dont j'ai vraiment besoin d'avoir un aperçu sont le numéro identifiant, le nom et le commentaire. Ceux qui sont dans la table initiale. Et puis, comme ça, je ne perds pas de données...

Ca y est Maurice, j'ai eu le déclic.
Je comprend vite mais il faut m'expliquer longtemps...
Vraiment, merci.

Hors ligne

 

#10 Thu 17 January 2008 11:49

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Tout le mérite à Sylvain Larvor qui a mis le doigt sur ce que tu n'avais pas compris (ou que j'avais insuffisament expliqué)
Tu sais désormais ce que veut dire "enregistrer la table ... au format Access dans la base"
Et moi qui croyais que c'était évident sad

Hors ligne

 

#11 Thu 17 January 2008 18:12

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Mé non, Maurice, c'est pas ta faute.
Je suis blonde....
Mais maintenant, je sais.

Hors ligne

 

#12 Thu 17 January 2008 18:14

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Miss T. a écrit:

...Maurice, si tu me débloques la situation, je te paie un coup... (après tout, tu n'es pas loin...)


Bon, alors je garde espoir ??  smile

Hors ligne

 

#13 Thu 17 January 2008 19:01

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Ben voui. Tu peux.
Chose promise, chose due.
La prochaine fois que je passerais sur Montpellier pour les affaires, je te préviendrai.
On se croisera peut-être au séminaire GMES ou a une réunion de SIG-LR?

(puis c'est l'occaz' de mettre un visage sur les personnes qui nous dépatouillent...)

Hors ligne

 

#14 Wed 13 February 2008 17:02

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Je reprend ce sujet car j'ai une bonne question.
La table créée par la manip' décrite ci-dessus est liée aux données contenues dans la base access.
J'ai tenté le transfert du tout sur un autre PC et... Ca ne marche plus.
Déjà, pour une raison qui m'échappe, la commande suivante

Code:

mapinfo_obj.do "SELECT * FROM ENS_60 WHERE Nouv_Num_ENS = " & Chr$(34) & Me.Identifiant_site & Chr$(34)

me donne le message d'erreur

Erreur d'exécution '-2147352567 (80020009)':
La table ENS_60 n'est pas ouverte


Euh, ben si en fait. Je vois son nom en haut de la fenêtre Carte!

Donc pourquoi Access bugue comme ça???? Maurice! Au secours!

Hors ligne

 

#15 Wed 13 February 2008 17:49

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Miss T. a écrit:

....J'ai tenté le transfert du tout sur un autre PC et... Ca ne marche plus.....


Peut être bien que dans le TAB de cette table figurait le chemin de la base dans laquelle sont les attributs....et qu'il a changé !!
Il suffirait alors de changer ce chemin "à la main" ???
Sinon pour le message d'erreur ....je ne sais pas sad Mais je ne vois pas pourquoi tu fais faire une sélection sur les attributs par MapInfo alors qu'elle peut se faire dans Access directement ??
ps: je ne suis pas un expert Access et plutôt que de me payer un coup, j'aimerais mieux, si tu est à l'aise avec ça, que tu m'aides à écrire un module pour attacher des tables textuelles dans Access

Hors ligne

 

#16 Wed 13 February 2008 18:02

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Access <--> MapInfo pour des polygones

Peut être bien que dans le TAB de cette table figurait le chemin de la base dans laquelle sont les attributs....et qu'il a changé !!
Il suffirait alors de changer ce chemin "à la main" ???


C'est fait. L'adresse de ma table access n'est plus chemin complet mais "..\maTable.tab". Ca, ça marche sur mon PC et sur l'autre. (Rappel: ".." = "remonte d'un étage dans l'arborescence")

Mais je ne vois pas pourquoi tu fais faire une sélection sur les attributs par MapInfo alors qu'elle peut se faire dans Access directement ??


Parce qu'avec le code qui suit, je centre la fenêtre Carte sur les coordonnées du centroïde du point sélectionné. Résultat: ouverture d'une carte MapInfo centrée sur l'enregistrement en cours.

Code:

mapinfo_obj.do "Set Map " & _
        " CoordSys Earth Projection 3, 1002, " & Chr$(34) & "m" & Chr$(34) & ", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 2200000 " & _
        " Center (centroidX(selection.obj),centroidY(selection.obj)) " & _
        " Zoom 30.0 Units " & Chr$(34) & "km" & Chr$(34)

Bon sang, faut que je trouve d'où vient ce kwak.

Hors ligne

 

#17 Wed 13 February 2008 19:36

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Access <--> MapInfo pour des polygones

Pas expert, je l'ai dit mais si la table est ouverte dans MapInfo il se peut qu'Access ne le sache pas (!) si ce n'est pas par son intermédiaire qu'elle a été ouverte ??

Hors ligne

 

Pied de page des forums

Powered by FluxBB