#1 Sat 02 January 2010 19:55
- feraudyh
- Participant actif
- Date d'inscription: 13 May 2009
- Messages: 103
creation de table et insertion qui ne marchent pas
Bonjour
Je veux créer une table nommée Road simple avec une colonne Objet et une colonne length.
Je veux inserer une ligne dans la table mais le code suivant ne fonctionne pas
Code:
include "mapbasic.def" declare sub main sub main dim lineobj as Object set coordsys NonEarth Units "m" Bounds(0, 0) (20, 20) Create Table Road (length float) create line into variable lineobj (0, 1) (10,1) insert into Road (Obj, length) values (lineobj, 10) end sub
Le message d'erreur: obj is not a column.
Or MapInfo a pris le pari de ne pas déclarer le colonne objet, je ne peux pas écrire ceci:
Code:
Create Table Road (length float, obj Object)
Des problèmes de débutant, certes, mais il faut dire que la doc MapBasic est assez mer.... à ce sujet.
Hors ligne
#2 Sat 02 January 2010 20:30
- feraudyh
- Participant actif
- Date d'inscription: 13 May 2009
- Messages: 103
Re: creation de table et insertion qui ne marchent pas
OK, j'ai la solution:
Il faut ajouter l'instruction
Code:
Create Map for Road
et il ne faut pas oublier
Code:
Commit table Road
à la fin.
Quant à Create Map je trouve que ce n'est pas assez bien mis en avant dans la doc.
Hors ligne
#3 Sat 02 January 2010 20:41
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: creation de table et insertion qui ne marchent pas
Bonjour
Les mots obj ou object sont "réservés" mais vous pouvez créer une colonne "Objet"...que vous remplirez avec du texte ou un entier caractérisant le type d'objet. Create Table Road (length float, objet smallint) est possible !
Pour insérer un objet ligne il suffit de
Insert Into Road (obj) Values (CreateLine(0, 1, 10, 1))
Par contre les colonnes Objet et length devront être mises à jour ensuite, le Insert Into ne faisant pas la manip' en une fois....
Hors ligne
#4 Sun 03 January 2010 15:32
- feraudyh
- Participant actif
- Date d'inscription: 13 May 2009
- Messages: 103
Re: creation de table et insertion qui ne marchent pas
Le code suivant marche sans problème:
Code:
include "mapbasic.def" declare sub main sub main dim lineobj as Object set coordsys NonEarth Units "m" Bounds(0, 0) (20, 20) Create Table Route (length float, name char(40)) Create Map for Route create line into variable lineobj (0, 1) (10,1) insert into Route (Obj, length, name ) values (lineobj, 10, "rue Pierre") create line into variable lineobj (0, 2) (10,2) insert into Route (Obj, length, name) values (lineobj, 10, "rue Paul") create line into variable lineobj (1, 0) (1,10) insert into Route (Obj, length, name) values (lineobj, 10, "avenue Jacques") create line into variable lineobj (2, 0) (2,10) insert into Route (Obj, length,name) values (lineobj, 10, "rue Thomas") create line into variable lineobj (0, 3) (10, 3) insert into Route (Obj, length,name) values (lineobj, 10, "allée Jean") Commit table Route end sub
mais on aimerais modulariser un peu avec l'appel à une routine add_line qui aurait l'effet d'un
create line ...
suivi d'un
insert into Route ...
mes essais sont infructueux.
Dernière modification par feraudyh (Sun 03 January 2010 15:35)
Hors ligne
#5 Sun 03 January 2010 15:46
- feraudyh
- Participant actif
- Date d'inscription: 13 May 2009
- Messages: 103
Re: creation de table et insertion qui ne marchent pas
Voici ma tentative pour modulariser le programme ci dessus
Code:
include "mapbasic.def" declare sub main declare sub addline(ByVal x1 as float,ByVal y1 as float, ByVal x2 as float, ByVal y2 as float,ByVal name as string) sub main set coordsys NonEarth Units "m" Bounds(0, 0) (20, 20) Create Table Route (length float, name char(40)) Create Map for Route call addline( 0.0, 2.0, 10.0, 2.0, "rue Pierre") call addline( 1.0, 0.0, 1.0, 10.0, "avenue Paul") call addline( 2, 0, 2, 10, "avenue Jacques") call addline( 0, 1, 10, 1, "boulevard Matthieu") call addline( 0, 3, 10, 3, "allée Thomas") Commit table Route end sub sub addline(ByVal x1 as float,ByVal y1 as float, ByVal x2 as float, ByVal y2 as float,ByVal name as string) dim lineobj as Object dim linelen as float create line into variable lineobj (x1, y1) (x2, y2) linelen = ObjectLen( lineobj, "m" ) insert into Route (Obj, length, name ) values (lineobj, linelen, name) end sub
Ca se compile bien mais lorsque je l'éxécute MapInfo affiche le message d'erreur laconique:
Le résultat de l'expression n'est pas un nom de colonne ou de table
Sans donner d'indication de la ligne!
Tout cela me pousse à vouloir dire beaucoup de méchancetés sur MapInfo.
Hors ligne
#6 Sun 03 January 2010 17:39
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: creation de table et insertion qui ne marchent pas
Peu de changements à faire, si ce n'est d'éviter les mots réservés...
Utilisez les lignes suivantes:
...
Create Table Route (longueur float, nom char(40))
...
insert into Route (Obj, longueur, nom) values (lineobj, linelen, name)
...
ps: la ligne d'erreur est toujours indiquée ! (dans votre cas, il est mentionné mb: 23)
Hors ligne
#7 Sun 03 January 2010 20:34
- feraudyh
- Participant actif
- Date d'inscription: 13 May 2009
- Messages: 103
Re: creation de table et insertion qui ne marchent pas
Merci Maurice,
Que sont les mot réservés que j'ai utilisés?
J'ai regardé la liste des mots réservés à la page 257 du manuel de référence de MapBasic 9.5 et je ne trouve ni length, ni name.
D'autre part je n'ai aucun message d'erreur à la compilation, et l'erreur est à l'exécution, la copie d'écran du message est ci joint afin que vous puissiez constater l'absence de numéro de ligne.
Mais j'ai compris (grâce à votre code) l'erreur que j'ai faite: c'est d'employer par mégarde le nom "name" à la fois comme nom de paramètre et comme nom de colonne.
J'ai gardé ma création de table telle quelle, mais j'ai renommé la variable formelle "name" en "nom".
Henri
Dernière modification par feraudyh (Sun 03 January 2010 20:54)
Hors ligne
#8 Sun 03 January 2010 22:44
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: creation de table et insertion qui ne marchent pas
Bien vu: il s'agit en fait d'une confusion paramètre / nom colonne
Par contre l'absence d'indication de ligne m'étonne ! Quelles sont les versions de MB et MI ??
Hors ligne
#9 Mon 04 January 2010 12:36
- feraudyh
- Participant actif
- Date d'inscription: 13 May 2009
- Messages: 103
Re: creation de table et insertion qui ne marchent pas
J'ai MapBasic 9.5
C'est assez décevant de ne pas avoir de numéro de ligne, mais avec une insertion judicieuse de l'instruction Note on finit par trouver la ligne.
Hors ligne
#10 Tue 22 June 2010 11:48
- jeremy_SIG
- Juste Inscrit !
- Date d'inscription: 8 Mar 2010
- Messages: 8
Re: creation de table et insertion qui ne marchent pas
d'ou venait le message d'erreur alors???? car j'ai le même message
Hors ligne
#11 Tue 22 June 2010 12:05
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: creation de table et insertion qui ne marchent pas
En fait le code est "bon" mais ce qu'il demande à MI est une bêtise et c'est un message MI qui s'affiche (sans ligne)...
MI attend une colonne ou une table...et ne les obtient pas
Hors ligne