Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

GEODATA DAYS 2024

#1 Tue 20 April 2010 11:16

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

[MapBasic 9.x] Créer un champ avec un rowid

Bonjour,

Je souhaite créer une colonne avec un rowid, afin d'avoir un identifiant unique dans ma table.

Quel code utilisé?????

Merci à vous.

Hors ligne

 

#2 Tue 20 April 2010 11:45

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Salut,

Il me semble que:

Code:

Update table Set columnID = RowId

doit convenir
A+
Joël

Hors ligne

 

#3 Tue 20 April 2010 13:55

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Merci pour votre réponse!!!
Apparemment il reconnait votre ligne, mais pas la suite, il me met 'Unrecognized command...'

Voici mon code :

Code:

Update nomtable Set columnID = RowId
idPolygone = nomtable.ID 
SELECT * FROM nomtable WHERE id = idPolygone into monPolygone

Si vous pouviez me dire d'où cela vient, se serait bien!!!

Merci

Hors ligne

 

#4 Tue 20 April 2010 14:07

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Unrecognized command...
Quelle est la commande non reconnue?
nomtable.ID a t'il été déclaré en "alias"?
Attention à la casse --> ID<>id

Dernière modification par Spacejo (Tue 20 April 2010 14:07)

Hors ligne

 

#5 Tue 20 April 2010 14:12

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

La deuxième ligne n'est pas reconnue!!

Oui j'ai déclaré en alias :

Code:

DIM idPolygone as Alias

ID correspond à mon champ et id est juste une appellation, cela me parait correcte, non???

Hors ligne

 

#6 Tue 20 April 2010 14:15

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

idPolygone est l'identifiant des polygones?
As tu essayé de voir si un:

Code:

Select idpolygone from nomtable into resultat

avec la FMB te donne quelque chose
Il n'était peut être pas utile de créer un RowID

Dernière modification par Spacejo (Tue 20 April 2010 14:20)

Hors ligne

 

#7 Tue 20 April 2010 14:22

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Code:

DIM nomtable.ID as ALIAS

'on fait la boucle sur les enregistrements de la table choisie
    z = 1
    Fetch rec z from nomtable
    Do while not EOT(nomtable)

'on crée une table temporaire à partir du polygone sélectionné
    Update nomtable Set columnID = RowId
    idPolygone = nomtable.ID 
    SELECT * FROM nomtable WHERE id = idPolygone into monPolygone

'on crée une copie de la table d'où le polygone est sélectionné
    DIM maTable AS string
    maTable = TableInfo(j, TAB_INFO_NAME)

'on rajoute une couche avec le polygone sélectionné et on zoome sur celle-ci
    Add Map window WindowID(IdMap) Layer monPolygone
    SET Map Window WindowID(IdMap) Zoom Entire Layer monPolygone

'on défini le polygone en pochoir
    Fetch First from monPolygone
    SET Map Clipping Object monPolygone.obj

'on dessine dans le Layout un cadre permettant l'affichage de la carte
    create frame into window WindowID(IdLayout) (0.63, 3.48) (41.37, 29.1) Pen(1,1,0) brush(1, 16777215, 16777215) FROM WINDOW WindowID(IdMap) fillframe on

'on supprime la couche avec le polygone sélectionné
    Remove Map Window WindowID(IdMap) Layer monPolygone
'on ferme la table monPolygone
    Close table monPolygone

[...]
    
        Fetch next from nomtable
    Loop

Voici le code en entier afin que vous compreniez.

Je vais une boucle sur une table sélectionné dans un Listbox => résultat : nomtable.
Je souhaite que sur la première soit fait un pochoir et un zoom.
=> Premier problème : le pochoir fonctionne mais pas le zoom.

Ensuite je souhaite qu'il passe à la deuxième afin qu'il fasse la même chose, etc....
=> Deuxième problème : il me fait bien autant la manipulation autant de fois qu'il y a d'enregistrement dans la table, mais le problème est qu'il garde toujours la géométrie de la première.

On m'a donc conseillé d'utilisé un ID unique!!!! Maintenant si vous avez une autre solution qui fonctionne, je suis tout à fait preneur...

Merci pour l'aide, car la je patoge dans la semoule...

Dernière modification par Cyril Chat (Tue 20 April 2010 14:23)

Hors ligne

 

#8 Tue 20 April 2010 14:30

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Que je comprenne bien (mais il me semble déjà te l'avoir demandé sur le forum d'à côté wink )
Le plus important est le code ou le résultat car il existe d'autre soluce guarantissant le résultat mais sans le code.
Je viens de voir quelque chose ---> pour moi "columnID" est le nom de ta colonne qui contient l'ID donc
---> nomtable.ID visiblement la colonne oû tu veux l'ID s'appelle ID alors la ligne de code devient:
-->

Code:

Update table Set ID = RowId

Autre chose, je ne vois pas bien ce que tu veux faire avec:

Code:

SELECT * FROM nomtable WHERE id = idPolygone into monPolygone

As tu essayé

Code:

Select * from selection into monPolygone

si tu as fait une sélection

Dernière modification par Spacejo (Tue 20 April 2010 14:36)

Hors ligne

 

#9 Tue 20 April 2010 14:37

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Le plus important est le code, car je dois créer un programme de mise en page automatisée, simplifié, afin que tous les utilisateurs d'un sig puissent l'utilisé sans connaitre MapBasic.

Donc le résultat doit être correct (pas de bug) mais le code est très important.

Merci, j'essaye sa...

Hors ligne

 

#10 Tue 20 April 2010 14:40

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Oui avant j'avais bien :

Code:

Select * from selection into monPolygone

Mais on m'a dit de passer à :

Code:

SELECT * FROM nomtable WHERE id = idPolygone into monPolygone

car mon problème de zoom venait peut être de '*'.

Je ne pense pas vraiment car si j'ai un problème à cause de cela pour le zoom, je devrais l'avoir pour le pochoir!!!
Mais bon j'essaye tous ce qu'on me dit, car ça fait 2 semaines que je n'avance pas, donc il faut que je trouve la solution...

Hors ligne

 

#11 Tue 20 April 2010 14:43

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Cela ne marche toujours pas!!! Toujours le même message d'erreur!!!
Je ne sais plus quoi faire ou quoi essayer!!!

Hors ligne

 

#12 Tue 20 April 2010 14:49

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Dans la ligne:

Code:

SET Map Clipping Object monPolygone.obj

Ton objet polygone est définit
Select obj from monPolygone te donneras le polygone sélectionné

Hors ligne

 

#13 Tue 20 April 2010 14:57

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Non, je n'ai pas définit mon obj polygone, mais il ne me le demande pas.

J'ai tenté votre proposition, cela ne me donne rien de différent!!!

Hors ligne

 

#14 Tue 20 April 2010 15:17

Marc-André
Participant assidu
Lieu: Montréal
Date d'inscription: 30 Sep 2005
Messages: 688

Re: [MapBasic 9.x] Créer un champ avec un rowid

Bonjour,

Si vous êtes comme moi et que les lignes de commandes vous causent de l'urticaire, Utilisez les menus.

Avant toute mise à jour, sauvegardez et compactez votre table. Vous éviterez des messages d'erreurs.

Utilisez ensuite le menu suivant:
«Table -> Mettre à jour colonne»

Une fenêtre s'ouvre.
Choisissez la table à mettre à jour et la colonne que vous voulez éditer.
Pour la valeur: inscrivez «rowid».
Cliquez sur OK.

Hors ligne

 

#15 Tue 20 April 2010 15:30

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Quel est mon intérêt??? aucun, je dois créer un programme!!!

Puis cela ne me pose pas d'urticaire, j'ai juste que je bloque sur un passage difficile!!!
C'est tout...

Hors ligne

 

#16 Tue 20 April 2010 16:28

Marc-André
Participant assidu
Lieu: Montréal
Date d'inscription: 30 Sep 2005
Messages: 688

Re: [MapBasic 9.x] Créer un champ avec un rowid

Bonjour

Désolé

Dernière modification par Marc-André (Tue 20 April 2010 16:29)

Hors ligne

 

#17 Tue 20 April 2010 18:27

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Un code pour t'aider:
Bien regarder ---> selection.obj

Code:

'*********************************************
'This program will zoom to a selected Object.*
'*********************************************
include "mapbasic.def"
include "menu.def"
include "icons.def"


Declare sub main
Declare sub button
Declare sub Rectangle
Declare sub Measure
Declare sub zoomreg
Declare sub point
Declare Sub selec
Declare Sub thing

Dim NYminx as float
Dim NYmaxx as float
Dim NYminy as float
dim dist as float

Sub Main

    Call button 

End Sub


Sub Button
    Alter ButtonPad "Main"
     Add
      Separator
      PushButton
       ID 5
       calling selec
       Icon MI_ICON_EMERGENCY_12
       HelpMsg "\nZooms to Selected Object"
    Show

    

End Sub

Sub Selec 
                                      'Tests if there is anything selected.
    If  SelectionInfo(SEL_INFO_NROWS) = 1 then    'If 1 then continue else note.
     Call thing 
    Else
       note "There must only be one and only one object selected"
    End if

End Sub




Sub thing   
                                     'Checks if selection is a point or region.
OnError Goto test


    If ObjectInfo(selection.obj, OBJ_INFO_TYPE) = OBJ_TYPE_POINT then
        call point                       'if point go to point function    
    Else
        call rectangle                      ' If region go to region function
    End if
exit sub
test:
Note "There is no object associated with this record"

End sub
     

Sub Rectangle                 'gets the the southeast and southwest coordinate points.

      NYminx = ObjectGeography(selection.obj, OBJ_GEO_MINX) 
      NYminy = ObjectGeography(selection.obj, OBJ_GEO_MINY)
      NYmaxx = ObjectGeography(selection.obj, OBJ_GEO_MAXX)

      Call Measure
    
End Sub

Sub Measure
    dist = Distance(NYminx, NYminy, NYmaxx, NYminy, "mi")'Measures the distance between 
                                          'coordinate points
    Call Zoomreg
end sub

Sub zoomreg
    dim x as float
    dim y as float
    
      x = centroidx(selection.obj)        'Determines centroid of selection
     y = centroidy(selection.obj)

     set map center (x, y) 'Sets map to centroid
     set map zoom dist    'Zooms to distance
end sub

Sub point
    Dim test as integer
    dim x as float
    dim y as float

     x = centroidx(selection.obj)        'Determines centroid of selection
     y = centroidy(selection.obj)

     set map center (x, y) 'Sets map to centroid
     set map zoom 10 units "mi"

End Sub

Hors ligne

 

#18 Tue 20 April 2010 21:09

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

Le code SELECT * FROM nomtable WHERE id = idPolygone into monPolygone

permet de créer une couche ne contenant que le polygone du pochoir et le zoom entire layer va centrer la vue sur ce polygone.

le problème ne vient pas de * mais du fait que cela soit une copie de la table d'origine.

le code initial était Select * from nomtable into monPolygone

Personnellement j'aurais mis

DIM idPolygone as Integer. Mais si dans la table le champ idPolygone existe on oublie...


NB Select * from selection into monPolygone devrait marcher aussi.

Hors ligne

 

#19 Wed 21 April 2010 09:01

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

J'avais déjà essayer 'Select * from selection into monPolygone' et cela ne fonctionné pas. Tout simplement car il n'y a pas de sélection direct sur la carte. Il me mettait donc pas de table sélection ouverte.

Je ne sélectionne pas d'entité, je vais une boucle sur ma table pour qui prenne du premier au dernier enregistrement...

Avant ma boucle, c'est ce que je faisais. je sélectionnais un polygone aléatoirement et manuellement et cela fonctionné bien (le pochoir et le zoom)...

Je tente le reste...

Hors ligne

 

#20 Wed 21 April 2010 09:07

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Je viens de tenter idPolygone en INTEGER, à la place d'ALIAS.
Cela ne change rien, il ne me reconnait toujours pas la commande de cette ligne :

Code:

    idPolygone = nomtable.ID

Pourtout, j'ai essayé dans tous les sens, et rien...


Existerait il une autre solution pour contourner le problème??? Car le champ ID ne change rien, toujours des bugs...

Hors ligne

 

#21 Wed 21 April 2010 09:23

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Salut,

As tu essayé --> Update nomtable Set idPolygone = RowId
A+
Joël

Hors ligne

 

#22 Wed 21 April 2010 09:37

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Message obtenu, le résultat de l'expression n'est pas un nom de table ou de colonne!!!

Toujours pareil... Il doit bien existé une solution quand même, mais je ne suis pas assez calé en MapBasic pour la connaitre...
En tout cas, MERCI A TOUS ceux qui essaye de m'aider, même si ça marche pas...

Mais bon si quelqu'un à une piste ou quoi, je suis prêt à tous essayer...

Hors ligne

 

#23 Wed 21 April 2010 09:42

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

je suis prêt à tous essayer...


Moi je serais prés à tout casser wink

Reprenons depuis le début, que doit faire ton code? quel est le cahier des charges smile

Dernière modification par Spacejo (Wed 21 April 2010 09:42)

Hors ligne

 

#24 Wed 21 April 2010 09:54

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Contexte général :
Je réalise un outil de mise en page automatisé pour MapInfo. Il doit être le plus généraliste possible afin qu'il puisse être réutilisé dans tous les cas de figures. C'est pour cela que je fais appel à de nombreuses variables (nomtable, nomchamp...).
Il doit faire des mises en pages, en boucle, sur des communes, canton, département... L'utilisateur ne doit intervenir en aucun cas (sélection manuel...). L'outil doit zoomer et faire apparaitre que l'entité choisie (pochoir).

Problème à résoudre :
J'utilise donc une ListBox afin de choisir la table sur laquelle sera effectuée la suite des opérations. Cette table choisie est définie en variable : nomtable.

Avec cette variable, il faut que je fasse un pochoir dessus et un zoom comme défini précédemment. Seulement seul le pochoir se fait alors que la variable monPolygone est la même entre le zoom et le pochoir...

Voici un de mes problème, mais qui est le plus important vu que c'est la base de l'outil...

Merci

Hors ligne

 

#25 Wed 21 April 2010 11:22

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Hors ligne

 

#26 Wed 21 April 2010 11:38

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

Bonjour

je viens de relire le code et je comprend ou est l'erreur...

Update nomtable Set columnID = RowId devrait être en dehors de la boucle.

le code ci-dessous est faux car le champ id c'est columnID.
idPolygone = nomtable.ID
Vu que le champ ID n'existe pas... erreur. Toute l'info était dans le message d'erreur.

Il faut donc écrire idPolygone = nomtable.columnID ça devrait mieux marcher.

Hors ligne

 

#27 Wed 21 April 2010 11:46

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Je l'avais déjà vu mais pas vraiment étudié!!

Je vais voir si cela peut m'apporter quelques choses!!

Hors ligne

 

#28 Wed 21 April 2010 11:49

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Oui mais ColumnID a été changé --> Post#8
C'était ma proposition:
Update nomtable Set columnID = RowId devient Update nomtable Set ID = RowId donc si Cyril a bien fait les modifs il devrait se retrouver avec une Colonne "ID" pour ces polygones et donc ---> nomtable.ID devrait exister avec les Id de ces polygones

Hors ligne

 

#29 Wed 21 April 2010 11:50

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Désolé de vous décevoir, mais ce n'est pas cela!!! J'avais déjà tenté columnID, ID dans les 2 cas, et cela ne marché pas...

Je viens de tenter de le mettre hors de la boucle, car je n'avais pas pensé que cela pouver problème, et ce n'est pas ça non plus malheureusement...

Toujours le message de commande inconnue

Merci quand même pour la proposition

Dernière modification par Cyril Chat (Wed 21 April 2010 11:50)

Hors ligne

 

#30 Wed 21 April 2010 11:53

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

En tout cas la manip de création avec RowId te donne bien un ID pour tout tes polygones, non?

Hors ligne

 

Pied de page des forums

Powered by FluxBB