Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 hmm

Dernière modification par thomas17180 (Wed 07 November 2012 14:41)

Hors ligne

 

Pied de page des forums

Powered by FluxBB