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 Tue 07 February 2006 10:31

alien_surfing
Juste Inscrit !
Date d'inscription: 7 Feb 2006
Messages: 5

requete plusieurs tables

Bonjour je suis nouvel utilisateur de Mapinfo. Je vous explique en détails car je n'y connais pas grand chose :

J'ai 2 tables : - une qui contient des objets graphiques (parcelles)         
                    - une autre table qui est représentée par des noms eux-mêmes localisés

Donc à l'affichage j'ai des zones graphiques (table1) avec des noms (table2) affichés dessus mais il n'y a pas de liens entre les 2 tables.

Mon but est d'extraire les parcelles dont le nom de l'autre table contient un certain caractère. Est-ce possible? si oui comment? En fait le problème c'est que normalement le nom de la parcelle devrait être un champ de la table parcelle? Or là les 2 tables ne sont pas directement liées, si ce n'est qu'il y a une concordance entre les noms et les parcelles à l'affichage.

En français ça me donne quelque chose comme : " extraire les parcelles de la table1 dont le nom de la table2 qui lui est superposé à l'écran  contient le caractère X "

Merci beaucoup, j'espère avoir été clair.

  Alien

Dernière modification par alien_surfing (Tue 07 February 2006 10:32)

Hors ligne

 

#2 Wed 08 February 2006 09:22

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

Re: requete plusieurs tables

Bonjour,
Une requête du genre:
Select * From parelles,noms Where parcelles.obj contains noms.obj And
Instr$(1,ObjectInfo(noms.obj,3),''X'')0
devrait marcher...

  Maurice NADAL

Hors ligne

 

#3 Wed 08 February 2006 10:32

alien_surfing
Juste Inscrit !
Date d'inscription: 7 Feb 2006
Messages: 5

Re: requete plusieurs tables

Merci pour cette réponse, malheureusement je ne sais pas vraiment comment l'écrire dans MapInfo. Il s'agit bien d'une requête à effectuer dans l'assistant "sélection SQL" ?

Si oui, je ne sais pas où mettre quoi.... Il y a les champs Colonnes, Tables, Critères... comment les remplir pour adapter la requête que tu m'as fournie ?

Merci encore, désolé mais on m'a lâché avec ce logiciel dans la nature, sans formation, donc je rame... et le tutoriel n'est pas assez précis pour les requêtes.

Hors ligne

 

#4 Wed 08 February 2006 11:39

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

Re: requete plusieurs tables

Désolé que vous soyez dans cette situation...
Pour faire 'vite' vous pouvez ouvrir la fenêtre MapBasic (Menu Option - ou Préférences suivant version - item Afficher fenêtre MapBasic ) et y recopier la ligne de mon précédent message (en changeant parcelles, noms et ''X'' par vos valeurs) puis quand elle est OK faire 'enter' sur la ligne: MI exécutera cette commande.
nb: entre la dernière parenthèse et le zéro de fin de ligne de la requête, le symbole 'différent de' (un 'inférieur à' suivi d'un 'supérieur à', que l'on trouve sur le clavier) a été 'bouffé' par le forum...

Hors ligne

 

#5 Wed 08 February 2006 11:47

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: requete plusieurs tables

Hello,

As tu jeté un coup d'oeil sur les liens de la bibliothèque du georezo ? (http://georezo.net/annu.php?cat_id=36). Ca devait te donner de bons coup de main pour ton auto formation.

Pour ta requete, tu peux la taper telle qu'elle dans le fenetre mapbasic (option afficher fenetre mapbasic) puis faire entrer.

Sinon, il t faut un chti coup de main en SQL pour comprendre le principe des requetes :

Code:

>Select * from TABLE(S) where CONDITION(S)

Ca c'est la structure de base

Après on peaufine :

Code:

> Select * From parcelles,noms

La c'est les tables concernées a savoir parcelles et noms

Code:

> Where

On indique les conditions de la requete

Code:

> parcelles.obj contains noms.obj

On ncherche à avoir les objets de la table parcelles qui contiennent les objets de la table nom

Code:

> And

On ajoute une condition (contrairement a OR qui est une alternative)

Code:

> Instr$(1,ObjectInfo(noms.obj,3),''X'')

Instr$ est une fonction mapbasic qui va fouiller dans une partie de la table noms pour en extraire des informations textuelles. Il en existe d'autres citées ailleurs je pourrais les reposter si tu le souhaite.

La boîte de dialogue dont tu parle est en fait un assistant pour créer des requetes SQL comme cele que te propose Maurice.

Voilà, c'est juste un petit message rapide pour te mettre sur le rail.

Bon courage, n'hésite pas à reposer des questions,
Rob.

Hors ligne

 

#6 Wed 08 February 2006 14:57

alien_surfing
Juste Inscrit !
Date d'inscription: 7 Feb 2006
Messages: 5

Re: requete plusieurs tables

OK, vos explications m'ont éclairci sur les requêtes. Mais (et oui il y a un "mais", ....) Quand je tape la requête dans la fenêtre Mapbasic, j'ai un message d'erreur :
Variable ou Champ Instr$ non défini

Ma requête :

Select * From CUDLPLUZones,CUDLPLUEcriture Where CUDLPLUZones.obj Contains CUDLPLUEcriture.obj And Instr$(1,ObjectInfo(CUDLPLUEcriture.obj,3),"n")<>0

Je me suis penché sur les sites de l'ensg notamment mais le tutoriel MapInfo est très vague sur ce point...

Je compte sur vous !! en tous cas merci, vous êtes très clair et rapide.

Hors ligne

 

#7 Wed 08 February 2006 18:17

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: requete plusieurs tables

Re,

En fait ce n'est pas Instr$() c'est Instr() sans le dollar. C'était tout bete en fait.

InStr( num , ch1 , ch2 ) Recherche, dans la chaine ch1 a partir de la position num,
une occurrence de la chaine ch2. Retourne la position a laquelle ch2 a ete trouvee,
ou le chiffre zero si cette chaine est introuvable. Pour commencer la recherche au debut de la chaine,
attribuez a num la valeur un (1).


Question suivante ? big_smile

Bon aller, je resiste pas, je cite un message posté il y a euuuh longtemps...Si ca peut depanner.

Bonjour,

Comme les questions sur les extractions de chaines, ou autres manipulations
reviennent souvent, dans differentes formes, je me permet de citer ces pages
du manuel de reference mapinfo (p259) sur les fonctions qui depanneront
surement de nombreuses personnes dans le meme cas.
En farfouillant dans les manuels on trouve pleins de choses tres
interessantes. Et comme il y a maintenant des versions numeriques en PDF, on
peut aussi y faire des recherches textuelles tres fructueuses. Au passage,
n'hesitez pas a consulter le guide de reference mapbasic, il y a aussi des
indications assez interessantes, meme pour ceux qui n'ont pas mabasic

Geomatiquement,
Robin PREST.

Fonctions

Role des fonctions :

creer des expressions.

La liste des fonctions est active quand :

la boite de dialogue Expression ou Selection SQL est affichee.

Utilisation

Une expression peut faire appel a une ou plusieurs fonctions. Dans le
tableau ci-apres, num represente une
expression numerique quelconque (par ex., 5), ch, une expression chaine (par
ex., km ) et obj, une expression
objet (par ex., Dept.obj represente les objets graphiques associes aux
enregistrements de Dept.).

Fonctions mathematiques

Abs( num ) Retourne la valeur absolue d'un nombre.
Cos( num ) Retourne le cosinus d'un nombre ; num est exprime en radians.
Int( num ) Retourne la partie entiere d'un nombre.
Maximum( num1 , num2 ) Retourne le plus grand des deux nombres.
Minimum( num1 , num2 ) Retourne le plus petit des deux nombres.
Round( num1, num2 ) Retourne un nombre (num1), avec l'arrondi num2 (par ex.,
si num2 est
egal a dix, num1 est arrondi a la dizaine la plus proche).
Sin( num ) Retourne le sinus d'un nombre ; num est exprime en radians.
Tan( num ) Retourne la tangente d'un nombre ; num est exprime en radians.

Fonctions de date

CurDate( ) Retourne la date courante.
Day( date ) Retourne le quantieme du mois (1 - 31).
Month( date ) Retourne le mois (1 - 12).
Weekday( date ) Retourne le jour de la semaine (1 - 7) ; 1 represente le
Dimanche.
Year( date ) Retourne l'annee (par ex., 1994).

Fonctions chaine

Chr( num ) Retourne le caractere qui correspond au code caractere (par ex.,
Chr(65) retourne A ).
DeformatNumber( str ) Inverse de la fonction FormatNumber ; retourne une
chaine ne
comportant pas de separateur de milliers.
Format( num , ch ) Retourne une chaine representant un nombre mis en forme.
Exemple :
Format(12345.678, ,#.## ) retourne ,345.68 .
FormatNumber( num , ch ) Retourne une chaine representant un nombre mis en
forme. Cette
fonction est plus simple a utiliser que Format, mais offre un controle
moindre sur le format (par exemple, vous obtenez toujours des
separateurs de milliers).
InStr( num , ch1 , ch2 ) Recherche, dans la chaine ch1 a partir de la position num,
une occurrence de la chaine ch2. Retourne la position a laquelle ch2 a ete trouvee,
ou le chiffre zero si cette chaine est introuvable. Pour commencer la recherche au
debut de la chaine, attribuez a num la valeur un (1).
LCase( ch ) Retourne la chaine ch en caracteres minuscules.
Left( ch , num ) Retourne les num premiers caracteres de la chaine ch.
Len( ch ) Retourne le nombre de caracteres d'une chaine.
LTrim( ch ) Supprime les espaces eventuels au debut de ch et retourne le
resultat
obtenu.
Mid( ch, num1, num2 ) Retourne num2 caracteres de la chaine ch a partir de
la position num1.
Proper( ch ) Retourne une chaine avec la premiere lettre de chaque mot en
majuscules.
Right( ch , num ) Retourne les num derniers caracteres de la chaine ch.
RTrim( ch ) Supprime les espaces eventuels a la fin de ch et retourne le
resultat
obtenu.
Str( expr ) Retourne une chaine, approximation d'une expression numerique.
UCase( ch ) Retourne la chaine ch en caracteres majuscules.
Val( ch ) Retourne la valeur numerique de la chaine ; par exemple, Val( 18 )
retourne le nombre 18. La chaine concernee ne doit pas etre formatee
(par exemple etre dotee de separateurs de milliers) ; Pour supprimer la
mise en forme, appelez la fonction DeformatNumber

Fonctions retournant des calculs geographiques

Area( obj , ch ) Retourne la superficie d'un objet. Le parametre ch indique
l'unite de
superficie, telle que sq mi (miles carre)ou sq km'' (Kilometres
carre).
CentroidX( obj ) Retourne l'abscisse (coordonnee X) du centroide d'un objet.
CentroidY( obj ) Retourne l'ordonnee (coordonnee Y) du centroide d'un objet.
Distance( num_x1 , num_y1 , num_x2
, num_y2 , ch )
Retourne la distance entre deux points. Les deux premiers parametres
indiquent les coordonnees x et y du point de depart ; les deux parametres
suivants indiquent les coordonnees x et y du point d'arrivee ; le
parametre ch est l'unite de distance, telle que mi ou km .
Perimeter( obj , ch ) Retourne le perimetre d'un objet. La valeur ch indique
un nom d'unite de
distance, telle que mi ou km . Seuls les objets polygones, ellipses et
rectangles ont des perimetres differents de zero.

Fonctions retournant des objets

Chacune de ces fonctions retourne un objet graphique. Si vous tapez une
commande de mise a jour dans la fenetre
MapBasic, vous pouvez utiliser ces fonctions pour creer des objets pour
chaque ligne de votre table. Ainsi, par
exemple, si votre table contient les colonnes x1, y1, x2 et y2, la commande
ci-dessous cree un objet ligne pour
chaque enregistrement de votre table :
Update tablename Set Obj = CreateLine (x1, y1, x2, y2)
Remarque : Cette commande de mise a jour redefinit chaque objet graphique de
votre table. Par consequent, il
peut etre preferable de faire une copie de votre table et de travailler sur
la copie.

Buffer( obj , res_num, larg_num, ch ) Retourne un objet polygone
representant un tampon. res_num indique la
resolution, en termes de noeuds par cercle ; larg_num indique le rayon du
tampon ; ch designe le nom de l'unite de distance (par ex., mi ou km )
s'appliquant a larg_num.
Centroid( obj ) Retourne un objet point situe au centroide d'obj.
CreateCircle( num_x, num_y,
rayon_num )
Retourne un objet cercle. rayon_num indique la valeur du rayon et
num_x et num_y indiquent les coordonnees du centre du cercle.
CreateLine( num_x1 , num_y1 ,
num_x2 , num_y2 )
Retourne un objet ligne. Les deux premiers parametres representent les
coordonnees du point de depart et les deux derniers, celles du point
d'arrivee.
CreatePoint( num_x , num_y ) Retourne un objet point num_x et num_y
representent les coordonnees
du point.

Dernière modification par Rob (Wed 08 February 2006 18:18)

Hors ligne

 

#8 Wed 08 February 2006 21:34

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

Re: requete plusieurs tables

Bonsoir,
Vraiment désolé pour la faute de frappe qui m'a fait rajouter un $ à InStr...
Merci au prof. Rob...qui sait surement que ce manuel passe sous silence des fonctions retournant des objets graphiques ou des calculs géographiques aussi 'fructueuses' que Ovelap, AreaOverlap, OverlayNodes, etc..qu'il est bien difficile de trouver dans le guide de référence MapBasic. Sans que celà soit une synthèse, les documents disponibles sur http://www.paris-pc-gis.com/MI_Enviro/mie_start.htm sont un bon guide pour découvrir la plupart de ces fonctions... et s'initier à la pratique du SQL...

Hors ligne

 

#9 Wed 08 February 2006 22:37

alien_surfing
Juste Inscrit !
Date d'inscription: 7 Feb 2006
Messages: 5

Re: requete plusieurs tables

Merci pour toutes ces infos, j'essaie de m'en sortir demain et je vous tiens au jus !!

@++

Hors ligne

 

#10 Thu 09 February 2006 09:43

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: requete plusieurs tables

qui sait surement que ce manuel passe sous silence des fonctions retournant des objets graphiques ou des calculs géographiques aussi 'fructueuses' que Ovelap, AreaOverlap, OverlayNodes, etc..qu'il est bien difficile de trouver dans le guide de référence MapBasic


J'oublie la plupart du temps qu'elles existent !!  big_smile
Merci de me les rappeller, va falloir que je les mette dans un coin celles là pour pas les oublier.

D'un autre côté, retenir tout les truc et astuces sur tous les softs sur lesquels on bosse c'est un exercice de jonglage pas évident . Avec les centaines de commandes sur Autocad (Map) et ses extensions (si si j'en connais un paquet de tête) ainsi que toutes les variables systemes (quand on comprend pas pourquoi les textes ont décidés d'être creux par exemple), les différences de fonctionnement entre mapinfo et arcgis, les trucs et astuces pour les faire fonctionner de façon optimale, les scripts disponibles sur la toile pour ces deux softs et les retrouver quand on change de poste, sans compter les hordes de petits logiciels bien utiles, ma mémoire fait parfois un peu défaut big_smile

Enfin heureusement qu'il y a les listes et tout ses utilisateurs pour dépanner. Et le site de Jacques encore une fois bien sûr.... wink

Rob, qui cherche encore son kutch.

Ps : Ovelap...pssstt... le "R"....> Overlap.
He, vous connaissez celui là : ProportionOverlap() ?

Hors ligne

 

#11 Thu 09 February 2006 14:51

alien_surfing
Juste Inscrit !
Date d'inscription: 7 Feb 2006
Messages: 5

Re: requete plusieurs tables

Encore moi... un grand merci à vous !!
J'ai réussi à obtenir le résultat que je cherchais. Je vais donc me mettre aux requêtes SQL, alors il est possible que je revienne vous harceler prochainement...

à bientôt

   Pierre

Hors ligne

 

#12 Thu 09 February 2006 18:29

casper
Participant occasionnel
Date d'inscription: 30 Nov 2005
Messages: 21

Re: requete plusieurs tables

Encore moi... un grand merci à vous !!
J'ai réussi à obtenir le résultat que je cherchais. Je vais donc me mettre aux requêtes SQL, alors il est possible que je revienne vous harceler prochainement...

à bientôt

   Pierre

Hors ligne

 

Pied de page des forums

Powered by FluxBB