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 SubPourriez-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 SubOu 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 SubLà, 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 SubLouanges 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


