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 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 sad

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 smile
Sinon...va falloir réfléchir sad

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

 

Pied de page des forums

Powered by FluxBB