#1 Mon 08 November 2010 10:24
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
ouvrir une table enregistrée comme variable
Bonjour,
j'ai créé une boite de dialogue me demandant le nom de la table que je veux créer. Cette variable je l'ai appelée nom_table
J'ai réussi (enfin, on m'a bien aidé) à créer cette table grâce à :
sub crea_table
Dim nom_table as string*20
nom_table = readcontrolvalue(2)
Dim cmd as String
cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34)
Run Command cmd
Maintenant je veux ouvrir cette table j'ai donc sur le modèle ci dessus fais ceci :
sub ouvrir_table
Dim cmd2 as String
cmd2="Open Table "Z:\Table_Point\"+nom_table+".TAB"
run command cmd2
end sub
Mais cela ne marche absolument pas, pourriez vous m'aider ?
Vraiment merci d'avance :-)
Hors ligne
#2 Mon 08 November 2010 11:18
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: ouvrir une table enregistrée comme variable
Bonjour
Vous n'avez pas bien compris le principe...
cmd2="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)
et print cmd2 pour vérifier...
Hors ligne
#3 Mon 08 November 2010 11:46
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
merci
à quoi sert chr$(34) ?
Hors ligne
#4 Mon 08 November 2010 12:06
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
Dernière, vraiment dernière question, pourquoi ceci ne fonctionne pas ?
Dim nom_table as string*20
nom_table = readcontrolvalue(2)
Dim cmd3 as String
cmd3="Insert into"+chr$(34)+"+nom_table+"+chr$(34)+" values (readcontrolvalue(9), readcontrolvalue(5), readcontrolvalue(7))
run command cmd3
Hors ligne
#5 Mon 08 November 2010 13:09
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: ouvrir une table enregistrée comme variable
Le nom de la table n'a pas besoin d'être entre guillemets, par contre il manque un guillemet en fin de ligne et les readcontrolvalue() sont des variables
cmd3="Insert into "+nom_table+" values ("+readcontrolvalue(9)+", "+readcontrolvalue(5)+", "+readcontrolvalue(7)+")"
Peut être même faut il prévoir des chr$(34)=guillemets de part et d'autre des readcontrolvalue()...??
Enfin n'oubliez pas le print cmd3 pour vérifier !!
Hors ligne
#6 Mon 08 November 2010 13:30
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
ok ça marche :-)
Par contre quand je fais tourner ce mbx j'ai le message d'erreur : mb:103 identifiant de contr Readcontrovalue : argument 1 en dehors des limites.Sais tu pourquoi ?
Code:
Include "mapbasic.def" Declare sub main declare sub crea_table declare sub ouvrir_table declare sub remplir_XY declare sub demander_XY sub main 'demande du nom de la table dialog control statictext title "nom de la table à créer" position 120, 120 id 1 control edittext position 120, 130 id 2 width 80 control button position 120, 90 title "valider" id 3 calling crea_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 11 end sub sub crea_table Dim nom_table as string*20 nom_table = readcontrolvalue(2) Dim cmd as String cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34) Run Command cmd call ouvrir_table call demander_XY call remplir_XY end sub sub ouvrir_table Dim nom_table as string*20 nom_table = readcontrolvalue(2) Dim cmd2 as String cmd2="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34) run command cmd2 end sub sub demander_XY dialog control statictext title "Valeur X en l93" position 120, 120 id 4 control edittext position 120, 130 id 5 width 40 control statictext title "Valeur Y en l93" position 160, 120 id 6 control edittext position 160, 130 id 7 width 40 control statictext title "Commentaire" position 50, 120 id 8 control edittext position 50, 130 id 9 width 80 control button position 120, 90 title "valider" id 10 calling remplir_XY width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 12 end sub sub remplir_XY 'connaitre le nombre de lignes de la table ' dim n as integer ' dim i as integer ' n=tableinfo("+nom_table+", tab_info_nrows) 'se mettre sur la 1ère ligne vide ' fetch rec num n+1 from "+nom_table+" 'remplir X et Y Dim nom_table as string*20 nom_table = readcontrolvalue(2) dim cmd3 as string cmd3="Insert into "+nom_table+" values ("+readcontrolvalue(9)+", "+readcontrolvalue(5)+", "+readcontrolvalue(7)+")" run command cmd3 end sub
Hors ligne
#7 Mon 08 November 2010 13:56
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: ouvrir une table enregistrée comme variable
Trois remarques:
- pas vraiment besoin d'utiliser ici des Dim nom_table as string*20, Dim nom_table as string suffit
- si ce Dim nom_table as string est situé AVANT la Sub Main cela entraîne que la variable est définie pour TOUTES les Sub. On a donc besoin de dire nom_table = readcontrolvalue(2) une seule fois, le nom_table ainsi déterminé sera valide dans toutes les Sub qui l'utilisent. On doit, dans ce cas, détruire toutes les lignes Dim nom_table as string*20 et nom_table = readcontrolvalue(2) inutiles...
- la façon d'appeler les autres Sub à la fin de la Sub crea-table ne me plait pas du tout
Hors ligne
#8 Mon 08 November 2010 16:23
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
Merci pour tes remarques, j'apprends map basic sur le tas d'où les erreurs que tu signales. Par exemple où dois je appeler les autres Sub ? Et aussi pourquoi mon mbx ne fonctionne pas (valeur hors limite) ?
Merci :-)
Hors ligne
#9 Mon 08 November 2010 19:37
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Si ta table a plus de 20 caratères ta variable est trop petite
d'ou
pas vraiment besoin d'utiliser ici des Dim nom_table as string*20, Dim nom_table as string suffit
essaie just "Dim nom_table as string" avant ta sub main et enlève les autres declarations de variable nom_table.
JF
Hors ligne
#10 Tue 09 November 2010 08:56
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
J'ai toujorus un problème de hors limite...
J'ai modifié légèrement comme suit :
La valeur de la ligne 87 (en gras) m'est indiqué comme hors limite quand j'exécute le programme... Merci vraiment pour votre aide
Include "mapbasic.def"
Declare sub main
declare sub crea_table
declare sub ouvrir_table
declare sub remplir_XY
declare sub demander_XY
Dim nom_table as string
sub main
'demande du nom de la table
dialog
control statictext
title "nom de la table à créer"
position 120, 120
id 1
control edittext
position 120, 130
id 2
width 80
control button
position 120, 90
title "valider"
id 3
calling crea_table
width 40
control cancelbutton
title "quitter"
position 180, 90
width 50
id 11
end sub
sub crea_table
nom_table = readcontrolvalue(2)
Dim cmd as String
cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34)
Run Command cmd
call demander_XY
end sub
sub demander_XY
dialog
control statictext
title "Valeur X en l93"
position 120, 120
id 4
control edittext
position 120, 130
id 5
width 40
control statictext
title "Valeur Y en l93"
position 160, 120
id 6
control edittext
position 160, 130
id 7
width 40
control statictext
title "Commentaire"
position 50, 120
id 8
control edittext
position 50, 130
id 9
width 80
control button
position 120, 90
title "valider"
id 10
calling ouvrir_table
width 40
control cancelbutton
title "quitter"
position 180, 90
width 50
id 12
end sub
sub ouvrir_table
nom_table = readcontrolvalue(2)
Dim cmd2 as String
cmd2="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)
run command cmd2
call remplir_XY
end sub
sub remplir_XY
'connaitre le nombre de lignes de la table
' dim n as integer
' dim i as integer
' n=tableinfo("+nom_table+", tab_info_nrows)
'se mettre sur la 1ère ligne vide
' fetch rec num n+1 from "+nom_table+"
'remplir X et Y
nom_table = readcontrolvalue(2)
dim cmd3 as string
cmd3="Insert into "+nom_table+" values ("+readcontrolvalue(9)+", "+readcontrolvalue(5)+", "+readcontrolvalue(7)+")"
run command cmd3
'Insert into "+nom_table+" values (readcontrolvalue(9), readcontrolvalue(5), readcontrolvalue(7))
commit table "+nom_table+"
end sub
Hors ligne
#11 Tue 09 November 2010 13:19
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: ouvrir une table enregistrée comme variable
Inactive cette ligne en gras et ajoute un simple print nom_table
Si c'est le bon nom qui s'inscrit...il n'y a plus qu'à effacer ces lignes inutiles
Sinon...va falloir réfléchir
Hors ligne
#12 Tue 09 November 2010 13:41
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
J'ai fait comme tu m'as dit et cette étable est franchie.
Maintenant à l'exécution il me dit que la valeur que j'ai rentré dans le champ "commentaire" (id9) il refuse de me le prendre si je rentre des caractères mais me prend la valeur si c'est un chiffre.
Pourquoi ? la table créée a son champ "commentaire" défini comme charactère 250.
Je ne comprends pas (encore) :-(
Hors ligne
#13 Tue 09 November 2010 15:01
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Après que tu creer ta table avant ton call demander_xy essaie de faire ceci
Code:
Commit table nom_table Close table nom_table Open table "Z:\Table_Point\" + nom_table as nom_table
JF
Dernière modification par jean94 (Tue 09 November 2010 15:01)
Hors ligne
#14 Tue 09 November 2010 15:14
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
merci,
cela ne change rien...
pourtant quand je saisis un chiffre au lieu de caractères dans le champ "commentaire" cela fonctionne.
Puis quand je regarde les propriétés de la table créée j'ai bien le champ "commentaire" qui est en caractère 250
Je ne comprends pas du tout pourquoi il me refuse du texte...
@ l'aide
Hors ligne
#15 Tue 09 November 2010 15:19
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
J'ai trouver ton erreur je crois et ces pas facile à expliquer....
Pour ton deuxième formulaire, il faudrais que tu le passe en fonction plutot qu'en sub
ajoute avant ta maine les deux ligne suivante
declare function demande_xy() as string
dim TableauVal(3) as string
et remplace le restant de ton code par ceci
Code:
sub crea_table dim var_bidon as string nom_table = readcontrolvalue(2) Dim cmd as String cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34) Run Command cmd var_bidon = demander_XY() end sub function demander_XY() as string dialog control statictext title "Valeur X en l93" position 120, 120 id 4 control edittext position 120, 130 id 5 width 40 Into TableauVal(1) control statictext title "Valeur Y en l93" position 160, 120 id 6 control edittext position 160, 130 id 7 width 40 Into TableauVal(2) control statictext title "Commentaire" position 50, 120 id 8 control edittext position 50, 130 id 9 width 80 Into TableauVal(3) control button position 120, 90 title "valider" id 10 calling ouvrir_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 12 if commandinfo(CMD_INFO_DLG_OK) then demander_XY = "" end if 'else si tu veux tout annuler end sub sub ouvrir_table nom_table = readcontrolvalue(2) Dim cmd2 as String cmd2="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34) run command cmd2 call remplir_XY end sub sub remplir_XY 'connaitre le nombre de lignes de la table ' dim n as integer ' dim i as integer ' n=tableinfo("+nom_table+", tab_info_nrows) 'se mettre sur la 1ère ligne vide ' fetch rec num n+1 from "+nom_table+" 'remplir X et Y nom_table = readcontrolvalue(2) Insert into nom_table values (TableauVal(1), Val(TableauVal(2)), Val(TableauVal(3))) commit table nom_table end sub
JF
Dernière modification par jean94 (Tue 09 November 2010 15:26)
Hors ligne
#16 Tue 09 November 2010 15:44
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
Cela ne fonctionne pas
:-(
Hors ligne
#17 Tue 09 November 2010 16:07
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Pouvez vous être plus explicite et expliquer les erreurs svp
sinon je ne peux vous aider.
JF
Hors ligne
#18 Tue 09 November 2010 16:13
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
vous avez raison :
j'ai écrit ceci :
la compilation est ok mais au résultat il me dit que le résultat de l'expression de la ligne 111 n'est pas un nom de table ou de colonne
Code:
Include "mapbasic.def" Declare sub main declare sub crea_table declare sub ouvrir_table declare sub remplir_XY Dim nom_table as string declare function demander_xy() as string dim TableauVal(3) as string sub main 'demande du nom de la table dialog control statictext title "nom de la table à créer" position 120, 120 id 1 control edittext position 120, 130 id 2 width 80 control button position 120, 90 title "valider" id 3 calling crea_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 11 end sub sub crea_table dim var_bidon as string nom_table = readcontrolvalue(2) Dim cmd as String cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34) Run Command cmd var_bidon = demander_XY() end sub function demander_XY() as string dialog control statictext title "Valeur X en l93" position 120, 120 id 4 control edittext position 120, 130 id 5 width 40 Into TableauVal(2) control statictext title "Valeur Y en l93" position 160, 120 id 6 control edittext position 160, 130 id 7 width 40 Into TableauVal(3) control statictext title "Commentaire" position 50, 120 id 8 control edittext position 50, 130 id 9 width 80 Into TableauVal(1) control button position 120, 90 title "valider" id 10 calling ouvrir_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 12 demander_XY = "" end function sub ouvrir_table Dim cmd2 as String cmd2="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34) run command cmd2 call remplir_XY end sub sub remplir_XY 'connaitre le nombre de lignes de la table ' dim n as integer ' dim i as integer ' n=tableinfo("+nom_table+", tab_info_nrows) 'se mettre sur la 1ère ligne vide ' fetch rec num n+1 from "+nom_table+" 'remplir X et Y 'Insert into nom_table values (TableauVal(1), TableauVal(2), TableauVal(3)) 'commit table nom_table dim cmd3 as string dim cmd4 as string 'cmd3="Insert into "+nom_table+" values ("+TableauVal(1)+", "+TableauVal(2)+", "+TableauVal(3)+")" Insert into "+nom_table+" values (TableauVal(1), TableauVal(2), TableauVal(3)) run command cmd3 cmd4= "commit table "+nom_table+"" run command cmd4 end sub
Hors ligne
#19 Tue 09 November 2010 16:25
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Tu mélanges 2 codes ici :
Code:
'cmd3="Insert into "+nom_table+" values ("+TableauVal(1)+", "+TableauVal(2)+", "+TableauVal(3)+")" Insert into "+nom_table+" values (TableauVal(1), TableauVal(2), TableauVal(3)) run command cmd3
Veut tu l'insérer comme une commande ou pas?
Code:
Insert into nom_table values (TableauVal(1), TableauVal(2), TableauVal(3))
ou
Code:
cmd3="Insert into "+nom_table+" values ("+TableauVal(1)+", "+TableauVal(2)+", "+TableauVal(3)+")" run command cmd3
Mais pas Insert into "+nom_table+" values (TableauVal(1), TableauVal(2), TableauVal(3))
En plus tu fais un run cmd3 qui n'est pas défini...
Utilise la fonction Val() pour TableauVal(2) et TableauVal(3) car il faut un unité de type float.
JF
Dernière modification par jean94 (Tue 09 November 2010 16:27)
Hors ligne
#20 Tue 09 November 2010 16:33
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
cas 1 (sans cmd 3) j'ai "impossible de convertir les données"
cas 2 trouvé [,] pendant la recherche [chaine de caractrère]
:-(
Hors ligne
#21 Tue 09 November 2010 16:37
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Bonjour
Essaie de metrte une [.] plustot que [,] dans le ton edit text...si sa r`gle il te faut une fonction qui remplace , par .
JF
Hors ligne
#22 Tue 09 November 2010 16:43
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
pour
position 120, 130
mettre
position 120. 130 ?
Hors ligne
#23 Tue 09 November 2010 16:45
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Non pour les coordonnées que tu insères dans le edit text quand tu le débogue
JF
Hors ligne
#24 Tue 09 November 2010 16:49
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
j'ai fait tous les tests avec des chiffres entier (25 ou 3 ou 15 etc.)
Hors ligne
#25 Tue 09 November 2010 17:08
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: ouvrir une table enregistrée comme variable
Tu n'as pas mit la fonction val() pour la variable TableauVal(2) et TableauVal(3) tel que mentionner dans mon post 15 et 19
Voici un code un peu simplifier mais qui reste a travailler
Code:
Include "mapbasic.def" Declare sub main declare sub crea_table declare sub ouvrir_table declare sub remplir_XY Dim nom_table as string declare function demander_xy() as string dim TableauVal(3) as string sub main 'demande du nom de la table dialog control statictext title "nom de la table à créer" position 120, 120 id 1 control edittext position 120, 130 id 2 width 80 control button position 120, 90 title "valider" id 3 calling crea_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 11 end sub sub crea_table dim var_bidon as string nom_table = readcontrolvalue(2) Create Table nom_table (Commentaire Char(250),X Float,Y Float) file ApplicationDirectory$( )+ nom_table + ".TAB" TYPE NATIVE var_bidon = demander_XY() end sub function demander_XY() as string dialog control statictext title "Valeur X en l93" position 120, 120 id 4 control edittext position 120, 130 id 5 width 40 Into TableauVal(2) control statictext title "Valeur Y en l93" position 160, 120 id 6 control edittext position 160, 130 id 7 width 40 Into TableauVal(3) control statictext title "Commentaire" position 50, 120 id 8 control edittext position 50, 130 id 9 width 80 Into TableauVal(1) control button position 120, 90 title "valider" id 10 calling ouvrir_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 12 demander_XY = "" end function sub ouvrir_table Open Table ApplicationDirectory$( )+ nom_table+".TAB" call remplir_XY end sub sub remplir_XY Insert into nom_table values (TableauVal(1), val(TableauVal(2)), val(TableauVal(3))) commit table nom_table end sub
Dernière modification par jean94 (Tue 09 November 2010 17:31)
Hors ligne
#26 Mon 15 November 2010 08:23
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: ouvrir une table enregistrée comme variable
Moi ce que je ne comprends pas c'est qu'avec mon programme initial si dans la sub Remplir_XY je fais remplir une table existante (test) cela fonctionne. Par contre si je veux remplir la table variable cela ne fonctionne pas
Pourquoi ???
Code:
Include "mapbasic.def" Declare sub main declare sub crea_table declare sub ouvrir_table declare sub remplir_XY declare sub demander_XY Dim nom_table as string sub main 'demande du nom de la table dialog control statictext title "nom de la table à créer" position 120, 120 id 1 control edittext position 120, 130 id 2 width 80 control button position 120, 90 title "valider" id 3 calling crea_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 11 end sub sub crea_table nom_table = readcontrolvalue(2) Dim cmd as String Dim cmd6 as string dim cmd7 as string cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34) Run Command cmd 'dim cmd5 as string 'cmd5="print columninfo("+nom_table+",Commentaire,col_info_type)" 'run command cmd5 cmd6="close table "+nom_table+"" run command cmd6 cmd7="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34) run command cmd7 call demander_XY end sub sub demander_XY dialog control statictext title "Valeur X en l93" position 120, 120 id 4 control edittext position 120, 130 id 5 width 40 control statictext title "Valeur Y en l93" position 160, 120 id 6 control edittext position 160, 130 id 7 width 40 control statictext title "Commentaire" position 50, 120 id 8 control edittext position 50, 130 id 9 width 80 control button position 120, 90 title "valider" id 10 calling ouvrir_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 12 end sub sub ouvrir_table Dim cmd2 as String cmd2="Open Table "+chr$(34)+"Z:\Table_Point\"+nom_table+".TAB"+chr$(34) run command cmd2 call remplir_XY end sub sub remplir_XY print nom_table dim cmd3 as string dim cmd4 as string cmd3="Insert into "+nom_table+" values ("+readcontrolvalue(9)+", "+readcontrolvalue(5)+", "+readcontrolvalue(7)+")" run command cmd3 cmd4= "commit table "+nom_table+"" run command cmd4 open Table "Z:\Table_Point\test.tab" Insert into test values (readcontrolvalue(9), readcontrolvalue(5), readcontrolvalue(7)) end sub
[EDIT Maurice] Merci d'utiliser les balises prévues par le forum (code et/ou quote)...
Hors ligne
#27 Mon 15 November 2010 11:51
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: ouvrir une table enregistrée comme variable
Bonjour
Il y a beaucoup de "open" et de "close" inutiles...et vous ne vous servez pas assez des vérifications que permet l'introduction de "print"
Il faut comparer ce que donnent ces "print" avec ce qui s'inscrit dans la fenêtre MapBasic lorsqu'on fait l'action en direct dans MapInfo: ça permet de voir les erreurs de syntaxe (par exemple, pour la question posée, l'oubli de guillemets pour entourer une valeur texte)
Ci-après une version corrigée
Code:
Include "mapbasic.def" Declare sub main declare sub crea_table declare sub remplir_XY declare sub demander_XY Dim nom_table, cmd as string sub main 'demande du nom de la table dialog control statictext title "nom de la table à créer" position 120, 120 id 1 control edittext position 120, 130 id 2 width 80 control button position 120, 90 title "valider" id 3 calling crea_table width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 11 end sub sub crea_table nom_table = readcontrolvalue(2) cmd="Create Table "+nom_table+" (Commentaire Char(250),X Float,Y Float) file "+chr$(34)+"D:\Table_Point\"+nom_table+".TAB"+chr$(34)+" TYPE NATIVE Charset "+chr$(34)+"WindowsLatin1"+chr$(34) Run Command cmd call demander_XY end sub sub demander_XY dialog control statictext title "X (Lambert93)" position 120, 120 id 4 control edittext position 120, 130 id 5 width 40 control statictext title "Y (Lambert93)" position 160, 120 id 6 control edittext position 160, 130 id 7 width 40 control statictext title "Commentaire" position 50, 120 id 8 control edittext position 50, 130 id 9 width 80 control button position 120, 90 title "valider" id 10 calling remplir_XY width 40 control cancelbutton title "quitter" position 180, 90 width 50 id 12 end sub sub remplir_XY cmd="Insert into "+nom_table+" values ("+chr$(34)+readcontrolvalue(9)+chr$(34)+", "+readcontrolvalue(5)+", "+readcontrolvalue(7)+")" run command cmd cmd= "commit table "+nom_table run command cmd end sub
Hors ligne