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

SQLite Discussion :

Compacter le champ autoincrement


Sujet :

SQLite

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut Compacter le champ autoincrement
    bonjour,

    Soit une table avec un champ compteur s'autoincrémentant.
    Mettons que le dernière valeur du compteur est 100
    Si je crée un enregistrement, il passe à 101.

    si je supprime cet enregistrement, puis si j'en recrée un, le compteur passe à 102.

    bilan : j'ai un trou entre 100 et 102 que je ne récupérerai jamais.

    Sous Access, pour éviter cela, il suffisait de compacter la base de donnée entre la suppression et la création d'un enregistrement.

    Quelle est la méthode sur SQLite sachant que je travaille sous VB.NET ?

    C'est surtout que dans le cadre de mes opérations de tests, je fais pas mal de créations bidons suivies de suppressions donc j'ai un paquet de valeurs de compteur qui deviennent inutilisables.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 427
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,

    Sur ma version Sqlite (3.8.0.1), il suffit de réinitialiser la table sqlite_sequence à condition que la valeur que tu impose soit supérieure ou égale à celle du maximum inscrit en table.

    Cordialement

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Excuse-moi, j'ai oublié de préciser que je voulais savoir comment faire programmatiquement en VB.NET.

    Sinon, je ne vois la table sqlite_sequence que sur SQLite Developer et pas sur SQLite Expert (j'utilise les 2 selon ce que j'ai à faire).
    Sur le premier, il faut faire clic droit sur cette table puis Réindex ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 427
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,

    Non, il suffit de faire un update de la valeur max de ta table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update  sqlite_sequence set   seq  =  (select max(tacolonne) from tatable)
    where name = 'tatable'
    Cordialement

  5. #5
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Excellent !


    Du coup je vous fais partager ma fonction générique au cas où cela pourrait être utile à certains :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub CompacteTable(ByVal table As String, ByVal CompteurName As String)
            Dim sql As String
            sql = "UPDATE  sqlite_sequence SET   seq  =  (SELECT max( " & CompteurName & ") FROM " & table & ") " & _
    "WHERE name = '" & table & "'"
            Dim connexion As New SQLiteConnection(My.Settings.ConnectionString)
     
            Try
                connexion.Open()
                Dim cmd As New SQLiteCommand(sql, connexion)
                cmd.ExecuteNonQuery()
                cmd.Dispose()
     
     
            Catch ex As Exception
                MessageBox.Show(ex.ToString, "CompacteTable")
            Finally
                connexion.Close()
            End Try
        End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. champ autoincrémenté en java
    Par franfr57 dans le forum JDBC
    Réponses: 3
    Dernier message: 09/12/2006, 21h39
  2. [Mysql] Récupérer la valeur du champ autoincrement
    Par Hell dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/10/2006, 11h33
  3. [SQL] récuperer la derniére valeur d'un champ autoincrément
    Par belakhdarbts dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 26/06/2006, 13h37
  4. champ autoincrement
    Par gaucher dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/05/2006, 23h43
  5. SQL insertion avec champ autoIncrement
    Par sg-40 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 09/11/2005, 11h28

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