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é ?

#1 Fri 02 April 2004 14:46

Virginie Girault
Invité

Numerotation de lignes de table

Bonjour,
J'ai environ une centaine de tables, toutes de taille differente. Admettons que la table N°1 possede 3 enregistrements, les 3 premieres lignes seront donc numerotees dans l'ordre 1, 2 et 3. La seconde table possede 2 enregistrements, les lignes seront donc numerotees 4 et 5 respectivement et ainsi de suite. Ce n'est pas vraiment une utilisation de ROWID, je n'ai pas trouve moyen de le faire via une expression, mais avez-vous tout de meme des idees ? Sinon, je dois passer par MB, je ne vois pas autre chose. Merci beaucoup.

 

#2 Fri 02 April 2004 11:49

Christian Venet
Invité

Re: Numerotation de lignes de table

Bonjour,
Selon votre exemple, vous pouvez faire manuellement une mise a jour colonne
de votre seconde table avec l'expression rowid + 3 puis pour la troisieme
rowid + 5 , etc... mais c'est long !
Si vos tables ont un numero, vous pouvez essayer quelque chose du genre
ci-dessous, avec le nom de la table par exemple essai5
Update table_test Set Id = rowid + Val(Right( essai5 ,1))... ca marche
Reste maintenant a recuperer dans le nom de la table, un n° = nombre de
lignes (si cela existe...) et reiterer la mise a jour colonne...

Est-ce que cela repond a votre probleme ?

 

#3 Sun 04 April 2004 23:28

Rictrem
Invité

Re: Numerotation de lignes de table

Bonjour,

Mapinfo est capable de faire ce travail seul ou presque. Il suffit simplement d'executer un script que vous produirez avec le generateur de scripts Scriptgen.exe: www.geocities.com/rictrem/ScriptGen.html

Voici une recette pour solutionner votre probleme (il existe d'autres manieres de le traiter) :

Premierement il vous faut la liste des tables a ouvrir. Vous obtiendrez cette liste avec le logiciel ScruteF.exe sur le meme site que ScriptGen. Votre liste ressemblera a ceci :

E:TestNumLignetable1.TAB
E:TestNumLignetable2.TAB
...
E:TestNumLignetablen.TAB

Vous enregistrez cette liste dans un fichier texte.
Je suppose ici que chaque table comprend une colonne numero de type entier. Si ce n'est pas le cas, il est tres simple de la creer avec la commande Alter table que vous pouvez inserer dans votre script de base.

Ensuite avec le logiciel ScripGen faites les operations suivantes :

Collez le texte suivant dans l'onglet Script de base :

Open Table E:TestNumLignetable1.TAB as TableTraite
Update TableTraite Set Numero = rowid+nbligne
Commit Table TableTraite
Nbligne = Nbligne+TableInfo(1,8)
Close All

Ces commandes executent les actions suivantes :

Ouvre la table1 sous l'alias TableTraite.
Met a jour la colonne Numero avec la valeur du numero de ligne plus une variable
Enregistre la table
Additionne le nombre de lignes de la table a la valeur de la variable
Ferme tout

Dans l'onglet Script final placez ces deux lignes.

dim Nbligne as integer
Nbligne = 0

Ces commandes declarent la variable Nbligne et lui affecte la valeur 0.

Cochez l'option Utiliser une liste et dans l'onglet Liste de valeurs qui s'affichent ouvrez votre fichier qui contient la liste des tables a traiter.

Vous saisissez le texte suivant dans la zone Valeur a remplacer :  E:\Test\NumLignetable1.TAB

Vous cochez l'option Ajouter au script final actuel pour ne pas effacer la declaration de la variable qui s'y trouve deja.

Vous generez le script final. Ici l'option Trier a l'execution de l'onglet Liste de valeurs peut changer le resultat que vous obtiendrez. Si elle est cochee l'ordre des tables ouvertes sera l'ordre alphabetique croissant. Dans le cas contraire, ce sera celle de la liste.

Il ne reste plus qu'a ajouter la ligne suivante a la fin du script final :  undim Nbligne

Cela libere la memoire allouee par mapinfo.

Vous enregistrez votre fichier au format wor et il ne reste qu'a ouvrir le document avec mapinfo.
Votre travail est complete.

Salutations

 

Pied de page des forums

Powered by FluxBB