Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Mon 24 October 2005 18:15

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

Order By rowId ?

Bonjour,

J'essaie de générer une légende limitée aux entités d'une table effectivement présentes dans la zone d'affichage. Mon objectif est d'obtenir dans la légende les styles par défaut des entités de la table avec en libellés le contenu d'une colonne (chaque valeur de cette colonne correspondant au style de l'entité correspondante).

Pour cela, je crée par sélection une table temporaire correspondant à la zone qui m'intéresse :

Code:

Select * From EssaiLegende Where obj Partly Within (Select obj From Assemblage Where ID = 2) Into TMP_LEG NoSelect

J'ajoute ensuite cette table à ma fenêtre carte.
Je crée enfin la légende :

Code:

Add Cartographic Frame Window " + _idWinLeg +
      " Default Frame Title ""Légende de #"" Font (""Arial"",0,10,0)" +
      " Default Frame Style ""%"" Font (""Arial"",0,8,0) Frame From Layer TMP_LEG" +
      " Using Column object Label " + _strColLeg

Le résultat semble correct, mais à l'examen, l'association entre les styles d'entités et les valeurs de la colonnes est erronée. Si je fais la même chose avec une vraie table (pas une table temporaire) la même commande fonctionne parfaitement.

Je soupçonne un problème lié aux numéros d'enregistrements (rowid) et j'essaie de trier ma requête par "Order By RowId". Mais cette syntaxe est refusée par MapBasic (Référence de colonne non valide).

La seule parade que j'ai trouvée pour l'instant consiste à enregistrer le résultat de ma sélection dans une table, mais c'est un peu pénalisant pour un traitement répétitf...

Quelqu'un a-t-il une idée pour contourner ce problème ? Ou une autre solution à proposer...


Christophe Damour (SIGéal)

Hors ligne

 

#2 Tue 25 October 2005 09:44

Nathalie BILLER, Environnement Vôtre
Invité

Re: Order By rowId ?

Bonjour
j'ai effectivement constaté le même problème.
2 solutions :
- faire une légénde automatique sans récupérer les valeurs d'un champ : il
fait bien les codes couleur et faut réécrire la légende correspondante (pas
très satisfaisant "sigiquement" à mon goût).

- une autre solution, quasi semblable à la tienne : je fait une extraction
de la table à symboliser avec l'outil CUTTER (dispo sur le site de M. PARIS
je crois ou directionmag... ) qui fonctionne comme un pochoir. On définit
la zone de travail et il crée autant de tables "filles" que de tables au
départ (il garde même les noms).
inconvénient : cela crée effectivement une nouvelle table
intérêt : cela me crée une table beaucoup plus petite que l'originale et je
peux la sauvegarder dans mon dossier de travail (puis sur CD) sans que cela
me prenne trop de place... et la légende est juste.

- question : est-ce que si on enregistre la table temporaire en requête
cela fonctionne ? ? je crois me souvenir que non, mais ???


cordialement

Nathalie BILLER

 

#3 Tue 25 October 2005 10:32

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

Re: Order By rowId ?

Merci pour ta réponse, Nathalie.

À vrai dire, je me suis fait une raison... et j'enregistre donc le résultat de ma requête dans une table que j'ajoute ensuite à ma fenêtre pour créer la légende. Seul inconvénient : pour un traitement en volume ça prend un peu plus de temps, mais au moins ça fonctionne.

Je me demande quand même pourquoi on ne peut pas faire "order by rowid" dans une requête, alors qu'on peut faire "where rowid = x"... Si quelqu'un a une piste, je suis preneur.

PS : Que veux-tu dire par "enregistrer la table temporaire en requête" ?

Dernière modification par SIGEAL (Tue 25 October 2005 10:38)


Christophe Damour (SIGéal)

Hors ligne

 

#4 Tue 25 October 2005 12:08

brice
Participant occasionnel
Lieu: Niort
Date d'inscription: 25 Oct 2005
Messages: 42

Re: Order By rowId ?

Bonjour,

Je pense que c'est normal que tu n'arrives pas à trier par les rowID, étant donné que le rowid correspond au numéro de ligne de ta table.
1ère ligne - rowid=1
2ème ligne - rowid=2
...
Ta table est par défaut dèjà trié par rowid.

Je te conseillerais plutôt d'attribuer un identifiant unique à chaque objet inscrit en dur dans la table.

Cordialement,


HUGAULT Brice
CG 79 - Direction de l'aménagement et du développement durable
Pôle SIG
brice.hugault@texte-a-enlever.cg79.fr

Hors ligne

 

#5 Tue 25 October 2005 12:15

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

Re: Order By rowId ?

Brice,

Je comprends ta suggestion, mais le problème est le suivant :

Si je construis ma légende à partir du résultat de la requête, les correspondances Styles d'objets/Valeurs de champ sont erronées.

En revanche si je la construis à partir d'une table obtenue en sauvegardant le résultat de ma requête, les correspondances sont bonnes.

Je suppose donc qu'entre les deux la seule différence est l'identification des enregistrements et des entités, d'où ma tentative - vaine - de les réordonner. Ma table contient un champ avec des identifiants uniques, indexés, mais cela ne change rien au problème...

Un bug de MapInfo ?

(Ce dysfontionnement peut être constaté en créant manuellement la requête et la légende)

Merci de ta réponse.


Christophe Damour (SIGéal)

Hors ligne

 

#6 Tue 25 October 2005 12:17

lagnion
Participant actif
Date d'inscription: 5 Sep 2005
Messages: 64

Re: Order By rowId ?

ça ne répond pas vraiment à ta question, mais à propos de rowid:

prudence : si tu fais une selection et que tu mets à jour une colonne de la
selection en utilisant rowid, la valeur de rowid est le rang dans la
selection (et pas dans le fichier d'origine). (c'est d'ailleurs parfois bien
pratique, mais il faut le savoir).

il me semble que tu peux utiliser rowid soit dans une mise à jour de
colonnes, soit par données/choisir champs/expression (je n'ai pas cherché la
syntaxe en mapbasic). Mais dans le 2ème cas, tu affiches rowid dans ce
tableau de données-là, tu peux l'utiliser en critère de sélection, mais tu
ne peux pas le faire apparaitre dans la liste de colonnes (ou du moins, je
n'ai pas trouvé comment faire).

Annick Lagnion


annick lagnion
DDE29

Hors ligne

 

Pied de page des forums

Powered by FluxBB