IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Numéroter les lignes retournées par une table


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Numéroter les lignes retournées par une table
    Je suis en train de faire des tests d'enregistrement et d'effacement au sein de ma table.
    Cette table dispose comme beaucoup d'un champ id auto-incrémenté...
    Mes 20 premiers enregistrements étaient donc numérotés sans discontinuité de 1 à 20.

    A force d'essai et nettoyage, des entrées ont été effacées et je me retrouve avec des trous dans mes id:
    il me reste 5 entrées ayant pour id ; 1 , 3 , 12 ,13, 18 .

    Normalement j'aurais les id 1 , 2, 3, 4, 5.

    Quelle est la solution !!?

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Un champ Id qui sert de clef primaire unique est utile pour faire le lien dans une autre table avec l'enregistrement qu'il identifie.
    Autrement dit, si un enregistrement d'identifiant X est référencé dans une autre table par ce X, pas question de changer ce X en Y dans la seule première table !
    Si les enregistrements de la table ont un identifiant unique non repris ailleurs, pourquoi ne pas "compacter", mais le gruyère a bien des trous et ce n'est pas un problème !
    Si ton souci est de faire apparaître une numérotation des enregistrements, distincte des identifiants, continue, recréée à chaque interrogation de la table, il doit être aisé de le faire en SQL ou en Delphi.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    J'ai une seule table mais j'ai besoin que l'id ne soit pas erroné ( 1,2,3 ...). J'en ai besoin pour la phase d'impression.

    Mais ça se peut que l'utilisateur supprime un enregistrement et ajoute un autre alors dans les id, il n'y aura pas d'ordre ...
    Alors, comment je dois faire ?

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Toute problématique d'affichage et /ou d'impression ne devrait JAMAIS être supportée par la base de données !
    C'est à ton application de faire ce travail.

    Comme l'a précisé tourlourou, tu peux le faire directement dans ta requête.
    Exemple avec SQL Server :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select ROW_NUMBER() over (order by MyColumn) as ROW, * from MyTable where OtherColumn='Value'

    Si ton compteur doit commencer à zéro tu peut enlever 1 au résultat de la fonction (ça marche également pour commencer à toute autre valeur)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select ROW_NUMBER() over (order by MyColumn) - 1 as ROW, * from MyTable where OtherColumn='Value'

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    La base de données n'est pas précisé
    L'outil de reporting n'est pas précisé

    Imagine une clé qui change, il te faudrait recoder les clés étrangères dans les autres tables !
    C'est de la folie ... et le pire, c'est que je le vois où je travaille, une clé présente dans 100 tables est parfois recoder, c'est délirant, je maudis mes prédécesseurs.

    Voir TDataSet.RecNo, possible que ton outil de reporting possède un OnBeforeRowPrint lancé à chaque ligne où tu peux fournir une donnée manuellement
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut
    Bonjour,
    si j'ai bien compris votre principal souci est dans la numérotation des lignes durant l'impression. donc là vous vous retournez vers l'éditeur d'impression que vous utilisez par exemple fastreport contient des champs ou variable propre line page date. sinon dans votre base vous ajoutez un champs de classement qui sera mise à jour après chaque suppression ainsi la requête d'impression sera classée par ce dernier champs.
    espérant que je vous ai bien aidé.
    Merci.
    Deux, n'apprendront pas; le timide et l'arrogant

Discussions similaires

  1. numéroter les lignes ayant la même valeur dans une requête
    Par raiamanu dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 12/10/2007, 10h49
  2. Comment numéroter les lignes dans l'éditeur VBA
    Par Adrian dans le forum VBA Access
    Réponses: 11
    Dernier message: 17/05/2007, 22h55
  3. [wxTextCtrl] numéroter les lignes
    Par and1hotsauce dans le forum wxWidgets
    Réponses: 12
    Dernier message: 26/01/2007, 03h51
  4. [MySQL] Comment lister de manière numérotée les lignes d'une table
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/12/2006, 17h12
  5. [TRichEdit] Comment numéroter les lignes ?
    Par ARDILLER dans le forum Composants VCL
    Réponses: 1
    Dernier message: 27/03/2006, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo