#1 Tue 12 September 2006 09:18
- Vincent Vauchey
- Participant assidu
- Lieu: saint jean de braye
- Date d'inscription: 24 Jan 2006
- Messages: 288
Annonce: outil ajout avec ID automatique
bonjour
je debute sur mapinfo
je voudrais savoir si il est possible de crée des id automatique
je voudrais crée une colone ID ( charactere 10) et que lorsque je crée un elément sur ma carte l'objet qui sont des point est un id en automatique
exemple 1-2-3-4-etc.....
cela est il possible si oui comment
par avance merci
Hors ligne
#2 Tue 12 September 2006 10:09
- Eliane BERTOLOTTI
- Participant occasionnel
- Lieu: NICE (FRANCE)
- Date d'inscription: 7 Sep 2005
- Messages: 10
- Site web
Re: Annonce: outil ajout avec ID automatique
voici comment je procéderai :
je commence par créer ma couche de points (ou d'objets) par exemple dans la couche dessin
j'enregistre ma couche dessin que j'appelle "mes points"
le tableau associé contient une colonne ID non renseignée (tous ont 0 en principe)
tu peux si tu le souhaite donner un nom plus explicite en rebaptisant ta colonne ID
tu vérifie que ta colone ID est bien de type "Entier"
si besoin tu modifie
tu selection tout dans ta couche "mes points"
tu fais un "mettre à jour colonne"
dans la couche "mes point"
la colonne à mettre à jour est : ID (ou son nouveau nom)
la valeur est une "expression"
et dans l'expression souhaitée tu dis "ROWID"
et le tour est joué
toutes les lignes de ton tableau sont numérotées 1,2,3,4,5 ...
PS : il est possible d'initialiser la numérotation à une valeur précise mais je ne sais plus faire
J'espère malgrè tout avoir peut-être répondu à ta question
Bonne journée et bon courage !
Hors ligne
#3 Tue 12 September 2006 10:31
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Annonce: outil ajout avec ID automatique
Bonjour,
D'accord avec la réponse d'Eliane, mais pour le coté "automatique" de la chose je ne vois pas comment faire et je doute même qu'un outil mbx y parvienne. Je n'ai pas souvenir d'en avoir vu lors de mes recherches sur Internet , mais....
Hors ligne
#4 Tue 12 September 2006 11:28
Re: Annonce: outil ajout avec ID automatique
Hello,
Question bête, j'ai un trou, ne peut on pas lancer des commandes à l'ouverture du wor ?
On pourrait imaginer qu'à chaque lancement du wor, la colonne id se mette a jour, nan ?
Je suis très overbooké cette semaine mais en lançant une recherche sur le forum il doit y avoir des infos sur cette piste. A moins qu Maurice n'ait la réponse bien sur
Robin.
Hors ligne
#5 Tue 12 September 2006 11:40
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Annonce: outil ajout avec ID automatique
Question bête, j'ai un trou, ne peut on pas lancer des commandes à l'ouverture du wor ?
On pourrait imaginer qu'à chaque lancement du wor, la colonne id se mette a jour, nan ?
On peut...mais ça va aussi vite de lancer une mise à jour en fin de numérisation et on n'a pas à éditer de WOR.
Je suis très overbooké cette semaine mais en lançant une recherche sur le forum il doit y avoir des infos sur cette piste. A moins qu Maurice n'ait la réponse bien sur ;)Robin.
Si un mbx existe, il faudrait qu'il se substitue à tout ce que fait MI quand on numérise (c'est déjà lourd) ET qu'il inclue une procédure SelChangedHandler pour déclencher à chaque création d'objet un recalcul du RowID...par rapport à ta solution ou la mienne, je comprend qu'il n'y ait pas eu d'amateur pour se lancer là dedans!!
Hors ligne
#6 Tue 12 September 2006 15:38
Re: Annonce: outil ajout avec ID automatique
les réponses vont un peu dans toutes les directions et il serait bon d'y mettre un peu d'ordre. Tout d'abord, les valeurs de Rowid sont celles de la séquence des objets dans l'état de la table. Si cet état est modifié par suppression d'objets et compression de la table, les Rowids seront modifiés. Donc toute mise à jour faite à la fin d'une séance d'ajouts risque de perturber complètement les numéros attribués préalablement et personnellement je la proscrirai.
Une solution possible serait de faire une sélection des objets sans rowid et de faire la mise à jour de la colonne ID de cette seule sélection. Comme il est possible que le dernier ID attribué dans la session précédente soit > à son rowid (suite à une suppression/compression), il ne faut donc pas utiliser Rowid pour cette mise à jour. On pourrait envisager à la rigueur d'aller chercher la valeur du dernier ID (derval) et d'utiliser dans la mise à jour de la sélection (derval + Rowid "dans la sélection").
Ce qui précède donne une idée des problèmes que l'on peut rencontrer pour créer des ID automatiques et PERMANENTS, en bloc ou à la pièce. L'absence d'amateur à programmer une telle fonction comme le remarque Maurice tient je crois beaucoup plus à un manque de spécification ferme de la nature de cet identificateur que d'expertise à le faire.
Pourrait-on commencer à élaborer cette spécification?
Hors ligne
#7 Tue 12 September 2006 17:18
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Annonce: outil ajout avec ID automatique
D'accord, l'usage de RowID est peu fiable, sauf à s'entourer des précautions évoquées...et encore!!
Donc on l'oublie, de même qu'un outil de mise à jour à la volée (trop dur).
Resterait à créer un outil minimum qui mettrait à jour une colonne identifiant d'une table, enregistrée et compactée. L'identifiant serait idéalement en entier, pas en caractères (trop dur) et la mise à jour se contenterait d'incrémenter (dans les cellules où la valeur est nulle) des valeurs à partir de la valeur maximum des cellules déjà renseignées.
Je réfléchis en écrivant...mais avec un périmètre ainsi réduit ça parait faisable. Est-ce utile?? A vous de dire !!
Hors ligne
#8 Wed 13 September 2006 00:02
Re: Annonce: outil ajout avec ID automatique
Je fais les hypothèses suivantes:
1 - une colonne smallint de la table contient un identificateur numérique unique. Celui-ci peut avoir été créé par initialement par une mise à jour avec Rowid().
2 - les nouveaux id sont attribués séquntiellement à compter du numéro le plus élevé trouvé dans la table.
Le petit programme suivant fonctionne dans ce sens
----------------------------------------------------------------
include "icons.def"
declare sub addpointwithid
declare sub main
dim colid, tabin as string
'=============================
sub main
'=============================
colname="alpha"
tabin="detestable"
alter buttonpad id 2 add
toolbutton calling addpointwithid drawmode DM_CUSTOM_POINT
icon MI_ICON_LETTERS_P cursor MI_CURSOR_CROSSHAIR
end sub
'=============================
sub addpointwithid
'=============================
dim idmax as smallint
dim cmd as string
dim x, y as float
run command "select max("+colname+") from "+tabin+" into sele"
fetch first from sele
idmax=sele.col1+1
set coordsys table tabin
x=commandinfo(1)
y=commandinfo(2)
insert into tabin (obj,colname) values (createpoint(x,y),idmax)
end sub
------------------------------------------------------------
On peut ajouter les boutons jugés nécessaires (ligne, polyligne ...) avec chacun sa propre sub, différant seulement par la façon de créer l'objet correspondant.
Je pense que cette technique permettrait d'éviter tout dédoublement d'ID à condition naturellement de laisser cette colonne "tranquille".
Il faudrait naturellement habiller tout cela pour choisir les noms de la table et de la colonne d'ID que j'ai codés en dur pour le test.
S'il y avait preneur, je pourrais probablement produire un tel outil, mais j'ai besoin de commentaires/idées/confirmations ... avant de m'y lancer.
Jacques Paris
Hors ligne
#9 Wed 13 September 2006 10:20
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Annonce: outil ajout avec ID automatique
Commentaire d'un faignant: l'outil envisagé me parait très bien mais presque trop.
Ne suffirait-il pas d'un outil qui met à jour d'un coup une colonne d'identifiants d'une table (quels que soient les types d'objets): on crée classiquement ses objets et à la fin on met à jour leur identifiant ?
Sinon, pour l'outil tel que proposé, ne faudrait-il pas laisser à l'utilisateur une possibilité d'intervenir sur l'identifiant déterminé automatiquement (au prix dans ce cas d'un OK à cliquer à chaque objet)?
Aux usagers potentiels de décider....
Hors ligne
#10 Wed 13 September 2006 10:43
Re: Annonce: outil ajout avec ID automatique
Je pensais à ce que le programme offre au début d'une session l'identificateur original comme max(identificateurs existant)+1, l'utilisateur pouvant alors l'accepter ou le remplacer par une valeur supérieure (jamais inférieure). Durant une session d'ajouts, l'identificateur augmente d'une unité quelque soit le type d'objet ajouté.
Une session d'ajouts commencerait par l'identification de la table et de la colonne des ID. Si certains objets n'avaient pas d'ID. une fonction permettraient alors de leur en donner (suivant les mêmes principes que plus haut) avant d'ouvrir la phase d'ajouts.
Je sais, je commence toujours avec une bicyclette et je finis avec une Cadillac, mais j'aime prévoir plus grand. C'est donc le bon moment d'en rajouter ou de changer certains "accessoires"
Hors ligne
#11 Thu 14 September 2006 15:53
- Vincent Vauchey
- Participant assidu
- Lieu: saint jean de braye
- Date d'inscription: 24 Jan 2006
- Messages: 288
Re: Annonce: outil ajout avec ID automatique
merci de toute vos reponces avec la commande eliane ca fonctionne bien merci les autre piste sont a explorer
Hors ligne
#12 Tue 26 September 2006 21:34
Re: Annonce: outil ajout avec ID automatique
J'y suis arrivé avec le support de Maurice Nadal. Je viens de terminer un outil qui pourrait répondre à la question. Il crée bien des ID automatiquement en Integer ou Smallint, et traite les alpha de façon limitée: une partie alpha fixe suivie de chiffres (largeur fixe, valeur variable). Je sais que cela ne répond pas à toutes les spéficiations imaginables d'ID alpha, aussi je ne l'offre qu'en version Beta des fois où vous auriez des idées que je pourrais y intégrer.
À vous de jouer maintenant
AddObjectsWithID se trouve sur www.paris-pc-gis.com/Beta/beta.htm le dernier dans la liste
Hors ligne
#13 Fri 06 October 2006 11:44
- Vincent Vauchey
- Participant assidu
- Lieu: saint jean de braye
- Date d'inscription: 24 Jan 2006
- Messages: 288
Re: Annonce: outil ajout avec ID automatique
je viens de tester l'outil de jakesp il est tres bien, juste il bugsur certain nombre avec les disaine exactement
j'ai des id de type 3 fixe qui son 2E- et 4 variable qui commence a 0001 et quand il arive a 10 il met 00110 puis a 100 et 110 d'ou peut venir le probleme sans quoi l'outil est tres tres bien merci
Hors ligne
#16 Fri 06 October 2006 15:50
- Vincent Vauchey
- Participant assidu
- Lieu: saint jean de braye
- Date d'inscription: 24 Jan 2006
- Messages: 288
Re: Annonce: outil ajout avec ID automatique
merci jakesp c'est une vrais petite perle
Hors ligne
#17 Mon 09 October 2006 23:21
Re: Annonce: outil ajout avec ID automatique
Voilà testée en bonne santé la dernière version 2.1
Elle est disponible où était l'ancienne, mais vous pouvez aussi essayer une nouvelle page de décharge que j'ai construite sur l'avis de Robin Prest. Encore en développement pour les "sous-pages", mais qu'en pensez-vous? www.paris-pc-gis.com/decharge_mbx.htm
Hors ligne