Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
Pages: 1
- Sujet précédent - Visualiser sur une carte les items selectionnés dans une MultiListBox - Sujet suivant
#1 Tue 29 June 2010 14:39
- V. Girault
- Participant actif
- Lieu: Clermont-Ferrand
- Date d'inscription: 22 Sep 2005
- Messages: 106
Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour @ tous !
Je suis toujours sous MB 8.5, je n'ai pas eû de place dans le titre pour mettre la balise...
Grâce à votre aide, j'ai réussi tant bien que mal a mettre le résultat d'une requête dans une MultiListBox. Maintenant, je veux faire apparaître par un zoom entire layer tous les items que j'ai sélectionné dans ma MultiListBox. Pour l'instant, je ne parvients qu'à faire ceci sur le dernier item sélectionné....
Voici mon code actuel...
Code:
Sub ValidOperation Dim Schoix as Integer Dim ChampRec as Alias Operation = ReadControlValue(2) ChampRec = name & "." & ID While Operation <> 0 Select * from name Where Operation = ChampRec Into Resultat Noselect call Visu Operation = ReadControlValue(2) Wend End Sub Sub Visu DIM mnumtables AS INTEGER mnumtables = NumTables() Select * from Resultat Into table_select Add Map layer table_select Set Map Zoom Entire Layer table_select Close Table table_select IF NumTables() > mnumtables Then Close Table TableInfo(NumTables(),TAB_INFO_NAME) END IF End Sub
Pourriez-vous m'aider s'il vous plaît ?
Merci beaucoup d'avance...
Dernière modification par V. Girault (Tue 29 June 2010 14:41)
Hors ligne
#2 Tue 29 June 2010 19:05
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour
La méthode n'est pas bonne: comme il n'y a dans MI qu'une sélection à la fois, votre Sub ValidOperation aboutit à une table Resultat ou seule figure la dernière sélection
Le principe de la Sub ValidOperation devrait plutôt être de constituer une chaine de caractères la_liste - genre (IDa, IDb, ...IDn) - des ID sélectionnés dans la MultiListBox, puis, dans la Sub Visu de sélectionner les entités de name Where ID in la_liste
ps: on peut aussi tenter d'ajouter à la table Resultat des signes au fur et à mesure de la boucle, avec des select into bidule suivis d'un Insert genre Insert Into Resultat (Obj) Select Obj From bidule
Hors ligne
#3 Wed 30 June 2010 11:05
- V. Girault
- Participant actif
- Lieu: Clermont-Ferrand
- Date d'inscription: 22 Sep 2005
- Messages: 106
Re: Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour @ tous et merci à Maurice...
J'ai adapté mon code en fonction de la réponse ci-dessus, mais bien que la liste soit correctement constituée, il est signalé que rien n'est trouvé au niveau de la requête...
Ai-je fais une boulette au niveau de la création des arguments où j'ai retiré la dernière virgule à la fin de celle-ci ou est-ce au niveau de la comparaison du champ ID de ma table, sachant que c'est un entier, je le transforme en chaîne...
Voilà où j'en suis dans le code :
Code:
Sub ValidOperation ChampRec = name & "." & ID Operation = ReadControlValue(2) While Operation <> 0 ChOpe=ChOpe+Str$(Operation)+"," 'call Visu Operation = ReadControlValue(2) Wend RqOpe = left$(ChOpe,len(ChOpe)-1) call Visu End Sub Sub Visu DIM mnumtables AS INTEGER mnumtables = NumTables() Select * from name Where Str$(ID) In (RqOpe) Into table_select Add Map layer table_select Set Map Zoom Entire Layer table_select Close Table table_select IF NumTables() > mnumtables Then Close Table TableInfo(NumTables(),TAB_INFO_NAME) END IF End Sub
Ou alors faudrait-il passer ID en Alias ? Je vais continuer de chercher...
Merci beaucoup d'avance...
Hors ligne
#4 Wed 30 June 2010 13:01
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour
Insérer un print RqOpe avant le call Visu
Si c'est en caractère on doit avoir ("1","2",..."n")
Si c'est en nombre on doit avoir (1,2,...,n)
nb: ne pas oublier les parenthèses...et - à mon avis - éviter les caractères, ça complique !
Hors ligne
#5 Thu 01 July 2010 09:55
- V. Girault
- Participant actif
- Lieu: Clermont-Ferrand
- Date d'inscription: 22 Sep 2005
- Messages: 106
Re: Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour à tous !
Pour faire suite à la réponse de Maurice hier, j'ai eû un petit contre-temps...
Je reprends donc le fil aujourd'hui....
J'ai bien fait mon print RqOpe et la chaîne contient bien des chiffres sous forme (1,2,...,n). Dans la boîte de message, j'obtiens 1,7
Le problème est qu'ensuite la requête ne trouve rien, le signalant par "objet non trouvé", alors que ceux-ci existent bien dans la table.... Est-ce dans la requête que je me suis fourvoyé ?
Voici le code en cours :
Code:
Sub ValidOperation '======================================================================= ' Lancement de la requête sur les opérations et mise à jour de la carte ' sur le résultat de la requête '======================================================================= ChampRec = name & "." & ID Operation = ReadControlValue(2) While Operation <> 0 ChOpe=ChOpe+Str$(Operation)+"," Operation = ReadControlValue(2) Wend RqOpe = Left$(ChOpe,len(ChOpe)-1) Print RqOpe Call Visu End Sub Sub Visu DIM mnumtables AS INTEGER 'mnumtables = NumTables() Select * from name Where Str$(ID) In (RqOpe) Into table_select Select * from table_select Add Map layer table_select winid4=FrontWindow() If winid4 <> 0 then If WindowInfo(winid4, WIN_INFO_TYPE)=1 then note ("Map active") Set Map Window winid4 Zoom Entire Layer table_select Set Map redraw On Close Table table_select Else Note ("La bonne fenêtre n'est pas prête !") Note "Type fenêtre : "+WindowInfo(winid4, WIN_INFO_TYPE) If WindowInfo(winid4, WIN_INFO_TYPE)=2 then winid1=FrontWindow() Set Map Window winid1 Zoom Entire Layer table_select Set Map redraw On Close Table table_select End if End If End If 'IF NumTables() > mnumtables Then ' Close Table TableInfo(NumTables(),TAB_INFO_NAME) 'END IF End Sub
Là, je ne comprends pas trop... Dans le passage d'argument de la requête, je suis obligé de passer ID en Str$(ID) sinon j'ai une erreur de type dans l'expression car ID dans la table est entier... Ca me paraît correct pourtant, ou alors, une subtilité me manque.....
Merci beaucoup d'avance pour le petit coup de main
Dernière modification par V. Girault (Thu 01 July 2010 09:55)
Hors ligne
#6 Thu 01 July 2010 14:45
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour
Pour être tranquille, passer par une commande interprétée
Code:
Dim cmd As String cmd="Select * from name Where ID In "+RqOpe+" Into table_select" print cmd 'pour vérifier, facultatif... Run Command cmd
Hors ligne
#7 Thu 01 July 2010 16:23
- V. Girault
- Participant actif
- Lieu: Clermont-Ferrand
- Date d'inscription: 22 Sep 2005
- Messages: 106
Re: Visualiser sur une carte les items selectionnés dans une MultiListBox
Bonjour Maurice !
Et merci pour la piste en réponse...
Que c'est ballot ! Palsembleu, j'ai honte !
J'avais pourtant bien fait mon test du passage de la chaine cmd en Print, c'était là sous mes yeux, et je n'avais pas vu que name n'était pas passée en variable.... Du coup, le prog me disait après table name pas ouverte, alors j'ai focalisé mon attention ailleurs bien plus haut dans le code.... Et j'ai rien vu !
Honte à moi !
Voici le bon code :
Code:
Sub Visu DIM mnumtables AS INTEGER, cmd as String 'mnumtables = NumTables() winid6=FrontWindow() If WindowInfo(winid6, WIN_INFO_TYPE) = 1 then note "Fenêtre actuelle : "+WindowInfo(winid6, WIN_INFO_TYPE) cmd="Select * from "+name+" Where ID in ("+RqOpe+") into Pipo" Print cmd Run Command cmd Browse * from Pipo if TableInfo("Pipo",TAB_INFO_NROWS) = 0 then note "Aucun résultat..." else note "J'ai trouvé !" Select * from Pipo Browse * from Pipo Commit Table Pipo As "C:\Documents and Settings\GiraultV\Mes documents\MI\WOR\Pipo.TAB" CoordSys Earth Projection 3, 33, "m", 3, 46.5, 44, 49.00000000001, 700000, 6600000 Bounds (-792421, 5278231) (3520778, 9741029) end if End If Add Map layer Pipo winid4=FrontWindow() If winid4 <> 0 then If WindowInfo(winid4, WIN_INFO_TYPE)=1 then Note ("Map active") Set Map Window winid4 Zoom Entire Layer Pipo Set Map redraw On 'Close Table Pipo Else Note ("La bonne fenêtre n'est pas prête !") Note ("Type fenêtre : "+WindowInfo(winid4, WIN_INFO_TYPE)) If WindowInfo(winid4, WIN_INFO_TYPE)=2 then winid1=FrontWindow() Set Map Window winid1 Zoom Entire Layer RQ Set Map redraw On 'Close Table RQ End if End If End If 'IF NumTables() > mnumtables Then ' Close Table TableInfo(NumTables(),TAB_INFO_NAME) 'END IF Note "J'ai fini" End Sub
Louanges et remerciements à Maurice !
Dernière modification par V. Girault (Fri 02 July 2010 07:44)
Hors ligne
Pages: 1
- Sujet précédent - Visualiser sur une carte les items selectionnés dans une MultiListBox - Sujet suivant