Pages: 1
- Sujet précédent - [MapBasic] Vérifier la présence d'un champ avant de l'ajouter - Sujet suivant
#1 Wed 07 November 2012 09:24
- thomas17180
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 9 May 2011
- Messages: 50
[MapBasic] Vérifier la présence d'un champ avant de l'ajouter
Bonjour,
Je code sur Mapbasic un petit programme d'automatisation, et si pour le moment il fonctionne, j'aimerais l'améliorer et éviter un problème lié à l'ajout de champ.
En effet, l'utilisateur choisi une table ouverte dans une listbox et en cliquant sur un bouton, cela permet d'effectuer plusieurs traitements sur cette table (ajout de champs, remplissage de ces champs et export en csv). Toutefois, en testant mon outil pour trouver les "bugs" j'ai trouvé un problème.
Si la table contient déjà les champs que je désire ajouter, cela coupe le programme. En effet mon code se présente comme cela :
Code:
Open table w_nom_table 'Ouverture de la table sélectionnée dans la zone de liste ALTER TABLE w_nom_table(add Coord_X_L93 Float) 'Coordonnée X en L93 ALTER TABLE w_nom_table(add Coord_Y_L93 Float) 'Coordonnée Y en L93 ALTER TABLE w_nom_table(add Coord_X_WGS84 Float) 'Coordonnée X en WGS84 ALTER TABLE w_nom_table(add Coord_Y_WGS84 Float) 'Coordonnée X en WGS84 ALTER TABLE w_nom_table(add ORG_GEO Char(50)) 'Organisme ayant procédé à la géoloc ALTER TABLE w_nom_table(add TYP_GEO Char(25)) 'Outil ayant permis la géoloc ALTER TABLE w_nom_table(add ECH_GEO Char(30)) 'Qualité du géocodage ALTER TABLE w_nom_table(add DAT_GEO Date) 'Date de la modification
Ainsi, il faudrait que je fasse un système du type : If Coord_X_L93 n'existe pas Then Alter table.......... end if. Sauf que je ne trouve pas comment dire mon_champ existe/n'existe pas...
En attente de votre aide!!! Merci
Dernière modification par thomas17180 (Wed 07 November 2012 09:25)
Hors ligne
#2 Wed 07 November 2012 10:58
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: [MapBasic] Vérifier la présence d'un champ avant de l'ajouter
Bonjour,
2 fonctions sont à utiliser.
ColumnInfo avec comme attribut COL_INFO_NAME cela te renverra le nom de la colonne écrite comme COLn avec n le numéro de la colonne
et tableinfo avec comme attribut TAB_INFO_NCOLS cela te renverra le nombre de colonne de la table.
Avec ça tu devrais trouver ton bonheur.
cordialement
Hors ligne
#3 Wed 07 November 2012 11:25
- thomas17180
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 9 May 2011
- Messages: 50
Re: [MapBasic] Vérifier la présence d'un champ avant de l'ajouter
J'ai cherché de ce côté, mais j'ai pas très bien compris comment je pourrais l'utiliser car j'ajoute ces champs à des tables pouvant déjà avoir des champs (nombre pouvant différer également). Donc mon champ à ajouter peut-être en 1ere position comme en 5e ou 9e position... Du coup, mon problème c'est de lui dire que :
Nom_colonne = ColumnInfo(w_table_nom, ?????????, Coord_X_L93)
If Nom_colonne <> Coord_X_L93 Then
Alter Table...........
End if
(si il existe on passe au champ suivant)
Hors ligne
#4 Wed 07 November 2012 12:23
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: [MapBasic] Vérifier la présence d'un champ avant de l'ajouter
une petite idée comme ça
dim i as integer
dim test as logical
test = false
Code:
For i=1 to tableinfo(w_table_nom,TAB_INFO_NCOLS) if ColumnInfo(w_table_nom, "col"+ str(i), COL_INFO_NAME) = "Coord_X_L93" then test = true end if Next
si test = true alors passe au suivant.
NB tu peux transformer ce code pour en faire une fonction.
Hors ligne
#5 Wed 07 November 2012 14:13
- thomas17180
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 9 May 2011
- Messages: 50
Re: [MapBasic] Vérifier la présence d'un champ avant de l'ajouter
Merci pour ta réponse. Malgré tout en effectuant ce code :
Code:
For i=1 To tableinfo(w_table_nom, TAB_INFO_NCOLS) If ColumnInfo(w_table_nom, "COL"+str$(i), COL_INFO_NAME) = "Coord_X_L93" Then test = true End if Next If test = False Then ALTER TABLE w_nom_table(add Coord_X_L93 Float) 'Coordonnée X en L93 End If
Lors de l'execution, il me renvoi un message d'erreur disant ceci : "Variable ou champ w_table_nom non défini.
Cela n'arrivait pas avant, et je n'ai rajouté que le bout de code et si le test est faux.
Hors ligne
#6 Wed 07 November 2012 14:41
- thomas17180
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 9 May 2011
- Messages: 50
Re: [MapBasic] Vérifier la présence d'un champ avant de l'ajouter
J'ai résolu le problème en prenant une partie de ton code et celui qu'une personne m'a donné sur forumSIG, et ça marche !!!
Voici le code (pour un champ) :
Code:
dim test As Logical dim i as integer Dim Nb_Col As Integer test = False i=0 Nb_Col = tableinfo(w_nom_table, TAB_INFO_NCOLS) For i = 1 to Nb_Col If ColumnInfo(w_nom_table, "COL"+str$(i), COL_INFO_NAME) = "Coord_X_L93" Then test = True End If Next If test = False Then ALTER TABLE w_nom_table(add Coord_X_L93 Float) 'Coordonnée X en L93 End If
EDIT : comment mettre le sujet en résolu? je ne vois pas le bouton le permettant
Dernière modification par thomas17180 (Wed 07 November 2012 14:41)
Hors ligne
Pages: 1
- Sujet précédent - [MapBasic] Vérifier la présence d'un champ avant de l'ajouter - Sujet suivant