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

#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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB