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

#1 Thu 04 October 2001 21:50

Laurent
Invité

Mapbasic et rowid

bonjour,
j'ai besoin pour une application de retrouver le Rowid dans la table d'origine de plusieurs elements selectionnees

Ex : 3 departements selectionnees dans la table Deptmt, connaitre leur Rowid dans Deptmt pas dans la selection (1,2,3)

Merci
laurent
geo.maumet@texte-a-enlever.free.fr

 

#2 Thu 04 October 2001 21:52

Jacques Paris
Invité

Re: Mapbasic et rowid

Je vais speculer un peu sur celle-la. D'abord l'ingredient de base pour la
recette: COMMANDINFO(2) donne le rowid du dernier objet selectionne dans sa
table de base. Cela marche tres bien (voir une de mes dernieres applications
LastRowid).

S'il s'agit de trouver les rowids de plusieurs elements deja choisis, c'est
la ou je specule. Ma solution marche en simule dans la fenetre MapBasic.
1/ construire une reference qui ne sera pas effacee par la prochaine
selection
select * from selection into sel
2/ faire une boucle sur le nombre d'elements dans la selection [i= 1 to
tableinfo(sel,8)] qui comprend
selection * from sel where rowid=i
rowid of element >> commandinfo(2)

Vous pourriez peut-etre en faire une fonction que nous pourrions ajouter a
la banque du centre de ressources MB_R.

Bonne chance

Jacques Paris

 

#3 Fri 29 May 2009 08:45

sdauphin
Participant occasionnel
Date d'inscription: 30 Aug 2009
Messages: 20

Re: Mapbasic et rowid

Bonjour,

Je déterre ce sujet car je me pose la même question.

J'aimerai également récupérer les rowID d'origine sur une sélection multiple, j'ai essayé la méthode de J. Paris, sans succès.

Après 8 ans (!) y'a t'il une solution sous mapbasic/mapinfo 8.5

Pour contourner le pb pour l'instant, je crée une colonne temporaire Col_RowID sur la table d'origine, mais sur une table de 100000 ligns c'est assez long, et je voudrais éviter de modifier les tables sources.

merci
Stéphane

Dernière modification par olreb (Fri 29 May 2009 08:45)

Hors ligne

 

#4 Fri 29 May 2009 09:01

sdauphin
Participant occasionnel
Date d'inscription: 30 Aug 2009
Messages: 20

Re: Mapbasic et rowid

Une solution serait peut-être de sélectionner qu'un élément à la fois pour utiliser comandeInfo(selection,CMD_INFO_ROWID) et ensuite faire de nouvelles sélections qui exclue les éléments déjà selectionnés.

Mais je ne vois pas comment le faire pour limiter la selection à 1,

Hors ligne

 

#5 Sun 31 May 2009 09:30

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

Re: Mapbasic et rowid

olreb a écrit:

Une solution serait peut-être de sélectionner qu'un élément à la fois pour utiliser comandeInfo(selection,CMD_INFO_ROWID) et ensuite faire de nouvelles sélections qui exclue les éléments déjà selectionnés.
Mais je ne vois pas comment le faire pour limiter la selection à 1,


Ce que vous évoquez est exactement la méthode décrite par J. Paris, qui utilise pour ça une boucle, réalisable soit depuis la fenêtre MapBasic soit au sein d'un script mbx ...
Refaites l'essai, vous avez probablement mal appliqué la "recette" smile

Hors ligne

 

#6 Mon 01 June 2009 22:32

sdauphin
Participant occasionnel
Date d'inscription: 30 Aug 2009
Messages: 20

Re: Mapbasic et rowid

Merci Maurice de m'avoir incité à recommencer, effectivement cela fonctionne, je ne sais pas ce que j'avais mal fait au premier essai.

Je pense pouvoir gagner du temps sur l'exécution du code ainsi.

Voila l'exemple de code qui fonctionne :

Code:

Include "Mapbasic.def"
Include "Icons.def"
'
'
Declare Sub Main

Sub Main
dim i, n, m, nrow as integer
dim nomcarte, nomtable as string

Open Table "D:\MapBasic\TRONC.TAB" Interactive
Map From TRONC

Set CoordSys Earth Projection 3, 1002,"m", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 200000 Bounds (-113967455.417, -108367759.649)(115167455.417, 120767151.185)
Set Distance Units "m"

nomcarte = FrontWindow()
set Map Layer 0 Editable On

nomtable="TRONC"
Select * From nomtable Where obj Intersects CreateCircle(301469.5, 253027.9, 1) into SEL

n = SelectionInfo(SEL_INFO_NROWS)
print n + " objets selectionnes dans tronc"+ Chr$(10)

For i = 1 to n
    select * from SEL where rowid=i
    nrow = commandinfo(2)
Next

End Sub

La table "TRONC" est une table de tronçon de réseau d'assainissement.
Je travaille sur la reconstruction de réseau d'assainissement à partir du SIG. c. a. d. dessiner le bassin versant (ou la zone d'influence) en partant d'un point.

J'arrive au bout... ça sera bientôt dispo pour tous le monde.

Edit : malheureusement, ça ne me fait pas gagner beaucoup de temps sur l'exécution du code. Quand je passe en grandeur réelle sur une ville comme Nantes, ça devient très lent. Les recherches multiples dans des tables de 100000 lignes peut-être, la création d'objets dure trop longtemps sad

Dernière modification par olreb (Tue 02 June 2009 14:32)

Hors ligne

 

Pied de page des forums

Powered by FluxBB