Frequently asked questions - Base

    From The Document Foundation Wiki
    < Faq‎ | Base
    This page is a translated version of the page Faq/Base/127 and the translation is 93% complete.
    Other languages:

    Comment revenir à une numérotation continue pour une clé primaire ?

    • Contexte  : au fur et à mesure des ajouts et suppressions d'enregistrements dans une table, la clé primaire prend des valeurs non séquentielles. On souhaite retrouver une numérotation continue.
    • Cas non abordé dans cette FAQ : une ou plusieurs relations ont été définies reliant la table à d'autres tables via cette clé, et des données figurent dans ces tables.
    • Hormis ce cas non traité, différentes situations peuvent se présenter :

    La clé primaire est définie en auto-valeur et la table ne comprend plus aucune donnée

    • Via le menu Outils ▸ SQL on exécutera une requête du type :

    ALTER TABLE "NomTable" ALTER COLUMN "NomClePrimaire"  RESTART WITH 1

    La clé primaire est définie en auto-valeur et la table contient des données

    Copie d'écran
    Situation de départ : numérotation non continue
    • On souhaite poursuivre la numérotation : la table comprenait par exemple 20 enregistrements, on a supprimé les derniers, on souhaite reprendre à 15.
    On pourra utiliser la requête ci-dessus en modifiant la valeur de départ = 15
    • On souhaite tout renuméroter (y compris les enregistrements existants) : on pourra utiliser l'assistant copie de table.
    Copier-coller la table ou déplacer légèrement cette dernière avec la souris : l'assistant se déclenche.
    1. Donner un nom pour la nouvelle table
    2. Choisir l'option Définition et données, cliquer sur Suivant
    3. Garder tous les champs hormis le champ clé primaire
    4. Cliquer sur Créer, LibreOffice propose de créer une clé primaire : choisir Non
    5. La nouvelle table est créée. Il suffit de la modifier pour ajouter le champ clé primaire, le définir en auto-valeur, enregistrer.
    • Ci-dessous en images :
    Recréation de la clé primaire
    copie d'écran cf. liste ci-dessus
    Assistant de copie de table 1
    copie d'écran cf. liste ci-dessus
    Assistant de copie de table 2
    copie d'écran cf. liste ci-dessus
    Assistant de copie de table 3

    La clé primaire n'est pas définie en auto-valeur et la table ne contient pas de données

    • Aucune manipulation n'est nécessaire : le champ étant en saisie libre on peut indiquer la valeur souhaitée

    La clé primaire n'est pas définie en auto-valeur et la table contient des données

    • La clé n'étant pas en auto-valeur nous ne pouvons compter sur ce mécanisme pour assurer l'incrémentation. Nous pourrons toutefois créer un compteur à cette fin dans une instruction SQL exécutée via le menu Outils ▸ SQL
    Utilisation d'un compteur
    copie d'écran voir légende
    Situation de départ : numérotation discontinue & pas d'auto-valeur
    copie d'écran dialogue Outils SQL
    Exécuter via le menu Outils ▸ SQL
    copie d'écran identifiants renumérotés
    Résultat
    • L'instruction SQL :

    CREATE SEQUENCE "NUMENREG" AS INTEGER
    UPDATE "T_A" SET ID = NEXT VALUE FOR "NUMENREG"
    DROP SEQUENCE "NUMENREG"