Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2007, 17h37   #1
Membre actif
 
Inscription : juin 2002
Messages : 379
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 379
Points : 168
Points : 168
Par défaut Existe t'il un numero d'enregistrement ?

Bonjour, est ce qu'il est possible de connaitre le numero d'enregistrement dans une table sans avoir a faire le parcours de celle ci ?

Je precise que ce numero serait independant des champs de la table et de tout autres chose.

Merci pour vos reponse.
kase74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 18h50   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
je comprend pas ?
un peu de précision serait apprécié, la notion de "numéro d'enregistrement" ne veut pas dire grand chose dans le monde des serveurs SQL
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 10h38   #3
Membre actif
 
Inscription : juin 2002
Messages : 379
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 379
Points : 168
Points : 168
Bonjour makowski. Merci de t'interesser a mon post.

Eh bien je voudrais simplement connaitre le numero de l'enregistrement encours.
Mon objectif :
J'ai une table avec un champ primaire INTEGER autoincremente.
Suite a des suppressions dans cette table, il peut y avoir des "trous" dans la suite numerique que doit former le champ.
Donc je dois renumeroter ce champ afin de combler ces trous. Et bien sur tenir a jour le genrator qui y est lie.

J'ai fais une procedure stockee de cette forme :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
ID = GEN_ID(MonGenerator, -GEN_ID(MonGenerator,0)); -- RAZ du Generator
FOR SELECT MonChampCle
FROM MaTable
INTO ID_Temp
DO BEGIN
  ID = GEN_ID(MonGenerator,1);
  UPDATE MaTable SET
    MaTable.MonChampCle = ID
  WHERE MaTable.MonChampCle = ID_Temp
END
Ca marche tres bien, mais l'inconvenient, c'est que ma table augmentant de volume, cette operation devient tres, tres, tres, ... insupportablement longue !

Si il existe une UDF ou autre chose qui renvoie le numero de procedure, ma procedure deviendrait :
Code :
1
2
3
4
5
UPDATE MaTable SET
  MaTable.MonChampCle = NumeRoEnregistrement;

Remise a jour du generator;
Plus qu'un UPDATE =>> Beaucoup plus rapide !!!

Merci d'avance de ton aide.
kase74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 11h28   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
ça n'existe pas le "numéro d'enregistrement" dans les serveurs sql comme firebird, et ça n'a aucun sens
mais une petite recherche dans ce forum et sur google sur les suites t'aiderons à trouver le solution, la numérotation continue est un sujet largement traité dans le passé

mais la première question à se poser c'est "il y a des trous ? et alors, est ce bien grave ? ai je bien besoin d'une suite continue ? pourquoi faire ?"
en général, cela ne sert à rien
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 13h16   #5
Membre actif
 
Inscription : juin 2002
Messages : 379
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 379
Points : 168
Points : 168
Merci pour ta reponse.

Je suis d'accord avec toi : avoir une suite continue est inutile ! Mais comme c'est pas moi qui decide ...

Je pense avoir trouve la solution : Faire cette operation dans l'application avec une bete boucle while not Table.eof. puis juste un applyupdates a la fin de la boucle.
Mon seul souci : je n'arrive pas a comprendre le processus de blocage. Comment puis-je etre sur qu'aucun traitement est un cours sur ma table, et comment bloquer d'eventuels traitement pendant ma boucle ?
Je sais, tu vas me dire que le sujet est largement developper sur le forum. Mais moi pas m'y retrouver !

PS : je travaille avec Delphi7 + Firebird
kase74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 13h48   #6
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 758
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 758
Points : 6 779
Points : 6 779
Salut

Est-ce que tu as parcouru cet article sur les générateurs purs ?

Cela t'obligera certainement à retravailler ta base, mais cela pourrait être une solution à ton pb.

@+ Claudius.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h37.


 
 
 
 
Partenaires

Hébergement Web