#1 Mon 07 June 2010 16:10
- lina145
- Juste Inscrit !
- Date d'inscription: 7 Jun 2010
- Messages: 5
[MapBasic 6.5] plusieurs sélection dans une liste
Bonjours,
J'ai le problème suivant:
J'ai créé une bout de programme qui me permet, par rapport à une table de département présent dans une première listbox, d'en choisir et de les mettre dans une deuxième listbox. Je valide ma sélection et les communes concernées devrait apparaitre dans une troisième listbox. Le problème est que cette troisième listbox ne montre que les communes comprises dans le dernier dépratement sélectionnés.
Voila le bout de code qui me pause problème:
Code:
dim i as integer
dim y as integer
dim nom_dep as string
if nb_dep_choisit <> 0 then
for i = 1 to nb_dep_choisit
nom_dep = tab_dep_choisit(i)
for y = 1 to nb_dep_choisit
select * from INSSEE where C = nom_dep into com_selectionne
next
next
REDIM tab_com (Tableinfo (com_selectionne, TAB_INFO_NROWS))
nb_com = Tableinfo (com_selectionne, TAB_INFO_NROWS)
fetch first from com_selectionne
for i = 1 to nb_com
tab_com(i) = com_selectionne.col(1)
fetch next from com_selectionne
Next
end if
browse * from com_selectionne
alter control 11 title from variable tab_comQuelqu'un aurait-il une idée pour ce qui me fait défaut?
Hors ligne
#2 Mon 07 June 2010 16:22
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 6.5] plusieurs sélection dans une liste
Salut et bienvenue,
dim nom_dep as string
Donc ---> select * from INSSEE where C like "nom_dep" into com_selectionne
A+
Joël
Dernière modification par Spacejo (Mon 07 June 2010 16:23)
Hors ligne
#3 Mon 07 June 2010 16:27
- lina145
- Juste Inscrit !
- Date d'inscription: 7 Jun 2010
- Messages: 5
Re: [MapBasic 6.5] plusieurs sélection dans une liste
Merci Joël pour votre réponse rapide. J'ai effectué les changements mas je n'ai toujours que les communes du dernier départements sélectionnés qui apparaissent dans ma dernière listbox.
Dernière modification par lina145 (Mon 07 June 2010 16:27)
Hors ligne
#4 Mon 07 June 2010 16:33
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 6.5] plusieurs sélection dans une liste
Si tu as toujours les communes du département précédent c'est qu'il manque un redim du "nb_dep", non?
Dernière modification par Spacejo (Mon 07 June 2010 16:49)
Hors ligne
#5 Mon 07 June 2010 16:53
- lina145
- Juste Inscrit !
- Date d'inscription: 7 Jun 2010
- Messages: 5
Re: [MapBasic 6.5] plusieurs sélection dans une liste
Non je n'ai pas les communes du départements précédents mais celle du dernier sélectionné. Par exemple si je sélectionne "Allier" puis "Cantal" seulement les communes du Cantal s'afficheront.
et on ne peut pas faire un redim que sur les tableaux?
Hors ligne
#6 Mon 07 June 2010 16:59
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 6.5] plusieurs sélection dans une liste
Mais il n'y a pas la totalité du code là ?
Il manque des déclarations de variables.
Dernière modification par Spacejo (Mon 07 June 2010 17:01)
Hors ligne
#7 Mon 07 June 2010 17:02
- lina145
- Juste Inscrit !
- Date d'inscription: 7 Jun 2010
- Messages: 5
Re: [MapBasic 6.5] plusieurs sélection dans une liste
non le code et beaucoup plus long avec toutes les boites de dialogues. Depuis le début ça donne cela:
Code:
include "MAPBASIC.DEF"
'Déclaration des procédures
declare sub main
declare sub w_couche_ouverte
declare sub carte_ouverte(byval w_nom as string)
declare sub boite_cadastre
declare sub valider_cadastre
declare sub annuler_cadastre
declare sub valider
declare sub lst_choix_dep
declare sub ajout_dep
declare sub del_dep
declare sub selection_com
declare sub lst_choix_commune
declare sub ajout_commune
declare sub del_commune
declare sub recherche_com
declare sub boite_proprietaire
declare sub valider_proprietaire
declare sub annuler_proprietaire
declare sub debut_saisie
declare sub boite_saisie
declare sub valider_saisie
declare sub fin_saisie
declare sub boite_export
declare sub chemin_sauvegarde
declare sub valider_export
declare sub boite_recherche_proprio
declare sub lst_nom_proprio
declare function table_ouverte(byval w_table as string) as logical
'déclaration des tableaux
global tab_dep () as string
global tab_dep_choisit () as string
global tab_com () as string
global tab_com_choisit () as string
global tab_proprio () as string
Global path_projet as String
'déclaration pour stocker le nombre d'enregistrement dans les listes
global nb_dep as integer
global nb_dep_choisit as integer
global nb_com as integer
global nb_com_choisit as integer
global nb_proprio as integer
'déclaration de l'id de la fenêtre MapInfo
global id_map_win as integer
global nom_proprio as string
global section as string
global parcelle as integer
global com as string
global surface as integer
global repertoire as string
'_____________________________________________________________________________________________________________________
sub main
'Constitution du menu
create ButtonPad "Cadastre" as
pushbutton
icon 180
helpmsg "Nouvelle table cadastrale"
calling w_couche_ouverte
pushbutton
icon 321
helpmsg "Export du propriétaire"
calling boite_export
pushbutton
icon 175
helpmsg "Recherche d'un propriétaire"
calling boite_recherche_proprio
pushbutton
icon 55
helpmsg "Début de la saisie"
calling debut_saisie
pushbutton
icon 63
helpmsg "Fin de la saisie"
calling fin_saisie
show
nb_dep = 0
end sub
_____________________________________________________________________________________________________________________
sub w_couche_ouverte
'Vérification de couche ouverte ou non puis appelle de la boite de dialogue
dim w_file as string
dim w_nom_table as string
dim couche as string
dim i as integer
if table_ouverte("Cadastre") = FALSE then
open table "X:\CADASTRE NUMERISE\1 - CORREZE\Cadastre clients cabinet\Cadastre.TAB"
call carte_ouverte("Cadastre")
end if
if table_ouverte("departement") = FALSE then
open table "C:\Documents and Settings\Ludovic\Bureau\celine\MAPBASIC\CADASTRE\TABLE\departement.TAB"
call carte_ouverte("departement")
end if
if table_ouverte("INSSEE") = FALSE then
open table "C:\Documents and Settings\Ludovic\Bureau\celine\MAPBASIC\CADASTRE\TABLE\INSSEE.TAB"
'couche = fileopendlg (path_projet & "\table","INSEE.TAB","tab","Ouverture de la couche INSEE")
call carte_ouverte("INSSEE")
end if
Set Map Zoom Entire
call boite_cadastre
end sub
___________________________________________________________________________________________________________________
sub carte_ouverte(byval w_nom as string)
dim i as integer
dim w_couche_trouvee as logical
w_couche_trouvee = FALSE
id_map_win = 0
for i = 1 to numwindows()
if (windowInfo(i, WIN_INFO_TYPE) = WIN_MAPPER) then
id_map_win = windowInfo(i, WIN_INFO_WINDOWID)
print id_map_win
end if
next
if (tableinfo(w_nom, TAB_INFO_MAPPABLE) = TRUE) then
if (id_map_win = 0) then
map from w_nom
id_map_win = frontwindow()
else
for i = 1 to mapperinfo(id_map_win, MAPPER_INFO_LAYERS)
if layerinfo(id_map_win, i, LAYER_INFO_NAME) = w_nom then
w_couche_trouvee = TRUE
end if
next
if (w_couche_trouvee = FALSE) then
add map window id_map_win layer w_nom
end if
end if
end if
end sub
_____________________________________________________________________________________________________________________
'=====================================================================================================================
'Menu Nouvelle table cadastrale
'=====================================================================================================================
sub boite_cadastre
call lst_choix_dep
'call lst_choix_commune
dialog
width 290
height 320
position 250,50
title "Cadastre"
control okbutton
id 1
position 105,290 width 40 height 20
title "Valider"
calling valider_cadastre
control cancelbutton
id 2
position 155,290 width 40 height 20
title "Annuler"
calling annuler_cadastre
control GroupBox
id 3
position 5,10 width 280 height 80
title "Choix du département:"
control listbox
ID 4
position 10,25 width 100 height 55
title from variable tab_dep
value 1
control button
id 5
position 150,45 width 20 height 15
title ">>"
calling ajout_dep
control button
id 6
position 120,45 width 20 height 15
title "<<"
calling del_dep
control button
id 101
position 130,65 width 30 height 15
title "ok"
calling selection_com
control listbox
ID 7
position 180,25 width 100 height 55
title from variable tab_dep_choisit
value 1
control GroupBox
id 8
position 5,95 width 280 height 190
title "Choix de la commune:"
disable
control statictext
id 9
position 10,105 width 75 height 15
title "Recherche"
disable
control edittext
id 10
position 90,105 width 100 height 15
disable
control button
id 12
position 200,105 width 30 height 15
title "OK"
calling recherche_com
disable
control listbox
ID 11
position 10,125 width 100 height 150
title from variable tab_com
value 1
disable
control button
id 13
position 150,140 width 20 height 15
title ">>"
calling ajout_commune
disable
control button
id 14
position 120,140 width 20 height 15
title "<<"
calling del_commune
disable
control listbox
ID 15
position 180,125 width 100 height 150
title from variable tab_com_choisit
value 1
disable
end sub
___________________________________________________________________________________________________________________
sub valider_cadastre
call boite_proprietaire
redim tab_com(0)
redim tab_dep_choisit(0)
end sub
___________________________________________________________________________________________________________________
sub annuler_cadastre
dialog
width 100
height 70
position 350,200
title "Quitter"
control okbutton
id 16
position 10,45 width 30 height 20
title "Valider"
calling valider
control button
id 17
position 60,45 width 30 height 20
title "Annuler"
calling boite_cadastre
control statictext
id 18
position 10,10 width 75 height 30
title "Etes-vous sur de vouloir quitter?"
end sub
___________________________________________________________________________________________________________________
sub valider
redim tab_dep_choisit (0)
nb_dep_choisit = 0
'alter control 7 title from variable tab_dep_choisit
redim tab_com (0)
redim tab_com_choisit (0)
nb_com_choisit = 0
'alter control 15 title from variable tab_com_choisit
close table departement
close table com_selectionne
close table Selection
end sub
___________________________________________________________________________________________________________________
sub lst_choix_dep
dim i as integer
REDIM tab_dep (Tableinfo (departement, TAB_INFO_NROWS)) 'permet de redimensionner le tableau contenant la liste des départements
nb_dep = Tableinfo (departement, TAB_INFO_NROWS) 'le nombre des départements
fetch first from departement 'bouge sur le premier enregistrement de la table
for i = 1 to nb_dep
tab_dep(i) = departement.col(2) 'permet de sélectionner les intitulés de la deuxième colonne
fetch next from departement
Next
end sub
___________________________________________________________________________________________________________________
sub ajout_dep
dim selection as string
dim select_ind as integer
dim trouve as logical
dim i as integer
selection = ""
select_ind = 0
select_ind = readcontrolvalue(4)
selection = tab_dep(select_ind)
for i = 1 to nb_dep_choisit
if selection = tab_dep_choisit(i) then
trouve = true
end if
next
if trouve = FALSE then
nb_dep_choisit = nb_dep_choisit + 1
redim tab_dep_choisit(nb_dep_choisit)
tab_dep_choisit(nb_dep_choisit) = selection
alter control 7 title from variable tab_dep_choisit
end if
end sub
___________________________________________________________________________________________________________________
sub del_dep
dim selection as string
dim select_ind as integer
selection = ""
select_ind = 0
select_ind = readcontrolvalue(7)
selection = tab_dep_choisit(select_ind)
nb_dep_choisit = nb_dep_choisit - 1
redim tab_dep_choisit(nb_dep_choisit)
tab_dep_choisit(nb_dep_choisit) = selection
alter control 7 title from variable tab_dep_choisit
end sub
___________________________________________________________________________________________________________________
sub selection_com
'dim i as integer
'for i = 1 to nb_dep
'select * from INSSEE where C = "tab_dep_choisit.col(3)"
'fetch next from tab_dep_choisit
'next
'call lst_choix_commune
dim i as integer
dim y as integer
dim nom_dep as string
if nb_dep_choisit <> 0 then
for i = 1 to nb_dep_choisit
nom_dep = tab_dep_choisit(i)
'for y = 1 to nb_dep_choisit
select * from INSSEE where C = nom_dep into com_selectionne
'next
next
'REDIM tab_com (Tableinfo (com_selectionne, TAB_INFO_NROWS))
'nb_com = Tableinfo (com_selectionne, TAB_INFO_NROWS)
'fetch first from com_selectionne
'for i = 1 to nb_com
'tab_com(i) = com_selectionne.col(1)
'fetch next from com_selectionne
'Next
end if
browse * from com_selectionne
alter control 11 title from variable tab_com
alter control 8 enable
alter control 9 enable
alter control 10 enable
alter control 11 enable
alter control 12 enable
alter control 13 enable
alter control 14 enable
alter control 15 enable
end subDernière modification par lina145 (Mon 07 June 2010 17:08)
Hors ligne
#8 Mon 07 June 2010 17:13
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 6.5] plusieurs sélection dans une liste
Si tu veux incrémenter ta sélection avoir alier+Cantal, ne faut il pas utiliser un "noselect"
En sachant que selection est un nom utiliser par mapinfo.
Hors ligne
#9 Mon 07 June 2010 17:54
- lina145
- Juste Inscrit !
- Date d'inscription: 7 Jun 2010
- Messages: 5
Re: [MapBasic 6.5] plusieurs sélection dans une liste
J'ai essayé la solution avec le noselect mais cela ne marche toujours pas. J'ai mis un note dans la boucle pour voir si elle faisait bien le tour de tout les enregistrement et elle le fait bien.
Comme vous le dite elle doit écraser la sélection précédente. Mais je n'arrive pas à trouver comment faire pour mettre deux sélection ou plus dans une listbox.
Hors ligne


