#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@ 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
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"
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
Dernière modification par olreb (Tue 02 June 2009 14:32)
Hors ligne