#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