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 Thu 30 September 2010 09:02

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Creation colonne temporaire, pbl...

Bonjour,

J'ai créé 2 listes déroulante qui listent toutes les colonnes de la table pts2.

Je souhaite créer une colonne temporaire qui contienne la somme (concatainer) des 2 choix faits dans les listes déroulantes (choix de la liste1 + choix de la liste2)

Voici ce que j'ai écrit :

Sub miseajourcolonne
dim Valeur1 as alias
dim Valeur2 as alias
dim nouveau as string

'valeur1 est le nom de la colonne de la table pts2 qui a été choisie dans la liste déroulante1 et valeur2 celle de la liste déroulante2
    Valeur1 = columninfo(pts2,"col"&ReadcontrolValue(1),col_info_name)
    Valeur2 = columninfo(pts2,"col"&ReadcontrolValue(2),col_info_name)

'création de la colonne temporaire, je n'arrive pas à écrire que ma colonne temporaire nouveau comporte la somme des colonnes Valeur1 et Valeur2
    add column pts2 (nouveau char(10))from pts2 set to Valeur1 + Valeur2

Malheureusement cela ne marche pas. La compilation est bonne mais en utilisant ce mbx dans map info j'ai le message d'erreur suivant :
"Le résultat de l'expression n'est pas un nom de table ou de colonne" cela porte sur la ligne add column etc.

Pourriez vous m'aider ?

Cordialement

Hors ligne

 

#2 Thu 30 September 2010 13:25

Daniel
Membre
Lieu: Victoriaville, Québec
Date d'inscription: 6 Sep 2005
Messages: 2028

Re: Creation colonne temporaire, pbl...

Bonjour

Ma connaissance en Mapbasic est très limitée mais je sais que lorsque l'on fait un concatener, par exemple pour des labels, il doit y avoir des guillemet (").  Exemple : "colonne1" + "colonne2".

Est-ce que ça peut vous aider?

Daniel


De retour à la géomatique

Hors ligne

 

#3 Thu 30 September 2010 13:31

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Re: Creation colonne temporaire, pbl...

Merci pour votre réponse mais le problème ne vient pas de là.

Cordialement

Hors ligne

 

#4 Thu 30 September 2010 13:39

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Creation colonne temporaire, pbl...

Bonjour
Désolé si je reprends ma façon de voir les choses, mais voici le programme déjà ébauché dans ce sujet, post #7 agrémenté de l'ajout de colonne temporaire...
Les "trucs" sont d'utiliser un bouton "OK", puis des ReadControlValue et enfin une "bonne" expression des colonnes

Code:

Include "mapbasic.def"
Declare sub main
Declare sub dialog1
Declare sub traitement

dim tablo () as string
dim i as integer
dim valeur1,valeur2 as smallint

Sub main
Open Table "chemin_de_table\nom_de_table" As pts2
redim tablo (tableinfo(pts2,TAB_INFO_NCOLS))
i=0
  For i=1 to tableinfo(pts2,TAB_INFO_NCOLS)
    tablo(i) = columninfo(pts2,"col"&i,col_info_name)
  Next
Call dialog1
End sub

sub dialog1
Dialog
    Title "Comparaison de 2 semaines au choix"
    Width 300
    Height 200
    Position 150,150

    control listbox
        position 20,50
        width 60
        height 100
        title from variable tablo ()
       id 1

    control listbox
        position 100,50
        width 60
        height 100
        title from variable tablo ()
       id 2

    control OKbutton
        position 50, 180
        width 50
        calling traitement
       id 4

    control cancelbutton
        title"Quitter"
        position 110, 180
        width 50
       id 5
End sub

sub traitement
  Valeur1=ReadControlValue(1)
  Valeur2=ReadControlValue(2)
  add column pts2(nouveau char(100)) from pts2 set to pts2.COL(valeur1)+"/"+pts2.COL(valeur2)
end sub

Hors ligne

 

#5 Thu 30 September 2010 14:17

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Re: Creation colonne temporaire, pbl...

Bonjour Maurice,

j'avais créé le point ok ou du même genre (je retiens ce que tu me dis ;-) ) Par contre ton programme ne marche pas, peut être en partie parce que je concataine deux colonnes de caractère (j'ai modifié valeur1 et valeur2 en string mais cela ne fonctionne pas). Ton écriture me fait écrire 1/1 pour tout au lieu de 11 ,22 , 21, 31 etc.
Par contre quand je crée une colonne réelle comme suit j'arrive à faire la concaténation :
Sub miseajourcolonne
dim Valeur1 as alias
dim Valeur2 as alias
alter Table "pts2" ( add new Char(10) ) Interactive
    Valeur1 = columninfo(pts2,"col"&ReadcontrolValue(1),col_info_name)
    Valeur2 = columninfo(pts2,"col"&ReadcontrolValue(2),col_info_name)
    update pts2 set new = valeur1 + valeur2
end sub

Je n'arrive pas à traduire ces lignes en colonne temporaire :-(

Hors ligne

 

#6 Thu 30 September 2010 14:58

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Re: Creation colonne temporaire, pbl...

Pour tester j'ai écrit cela :
Sub miseajourcolonne
dim Valeur1 as alias
dim Valeur2 as alias
    Valeur1 = columninfo(pts2,"col"&ReadcontrolValue(1),col_info_name)
    Valeur2 = columninfo(pts2,"col"&ReadcontrolValue(2),col_info_name)
'ajout colonne réelle et mise à jour de celle-ci
                      alter Table "pts2" ( add nouveau Char(10) ) Interactive
                     update pts2 set nouveau = valeur1 + valeur2
'ajout colonne temporaire et mise à jour de celle-ci
    add column "pts2" (new char(10)) from pts2 set to valeur1 + valeur2
end sub

et les 2 résultats sont différents (les bons résultats sont ceux issus de nouveau (colonne réelle)

Pourquoi ????

Hors ligne

 

#7 Thu 30 September 2010 15:01

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Creation colonne temporaire, pbl...

Mon dernier programme  marche très bien chez moi...
valeur1 et valeur2 doivent rester en SmallInnt: ce sont les numéros des colonnes choisies par l'utilisateur
J'ai introduit "/" de sorte que la colonne temporaire se remplit avec chaine1/chaine2
Elle est définie en caractères (j'en ai mis 100 !) donc la concaténation ne devrait pas poser de problème

Hors ligne

 

#8 Thu 30 September 2010 15:19

jean94
Participant assidu
Date d'inscription: 13 Aug 2009
Messages: 436

Re: Creation colonne temporaire, pbl...

Bonjour

Essaie de remplacer + par & et il faut que t'es colonnes col"&ReadcontrolValue(1) et col"&ReadcontrolValue(2), soit de type char

J'imagine que ton deuxième résultat est une addition plustot qu'une concatenation?

JF

Hors ligne

 

#9 Thu 30 September 2010 15:23

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Re: Creation colonne temporaire, pbl...

chez moi cela ne fonctionne pas, puis je t'envoyer ma table (des fois que cela vienne d'elle ?
car vraiment ton programme et le mien donnent les mêmes résultats... faux, je ne comprends pas :-(

Hors ligne

 

#10 Thu 30 September 2010 15:37

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Re: Creation colonne temporaire, pbl...

Jean, cela ne vient pas là, très étonnant, vraiment...
mes colonnes sont de type caractère même si ce sont des chiffres qui sont dans celles-ci (0,1,2,3)
ainsi en concaténant deux colonnes (avec le + ou &) j'ai 12, 21, 31,01 etc

Avec le programme colonne temporaire de jean ou de moi nous avons les même résultats mais ceux ci sont faux... ce qui n'est pas le cas lorsque je crée la colonne réelle.

je ne comprends pas :-(

Hors ligne

 

#11 Thu 30 September 2010 17:14

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Creation colonne temporaire, pbl...

Reçu la table en question et le diagnostic est...curieux !!

- le programme du post #4 ci-dessus ne fonctionne sur cette table que si et seulement si elle est indexée ET que la première colonne indexée rencontrée soit celle d'un identifiant unique (pas obligé que cette colonne soit la première de la table)

- par contre ce programme fonctionne chez moi sur des tables non indexées (mais dont il faut remarquer que la première colonne - non indexée - est un identifiant unique...)

Il reste donc un peu de mystère à explorer.... smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB