#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é )
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
Reprenons depuis le début, que doit faire ton code? quel est le cahier des charges
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
Une piste --> http://www.forumsig.org/showthread.php?t=1197
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