#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 subHors 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 subJF
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 subHors 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 cmd3Veut 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 cmd3Mais 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 subDerniè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 subHors ligne





