#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....
Hors ligne