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

Lazarus Pascal Discussion :

Compactage et réindexation table Sqlite [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut Compactage et réindexation table Sqlite
    Bonjour,
    Petit à petit je fais mon petit trou avec lazarus et les tables sous sqlite.
    Je sais maintenant créer une base et des tables, écrire dans une table, la vider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MQ:='Delete from '+MTABLE;
      Sqlite3.SQL:=MQ;
      Sqlite3.ExecSQL;
      Sqlite3.ApplyUpdates;
      Sqlite3.SQL:='Select * from '+MTABLE;
      Sqlite3.ExecSQL;
      Sqlite3.RefetchData;
    et dernière trouvaille effacer un enregistrement lais là je ne suis pas sur que j'utilise la bonne méthode, mais surtout la suite qui me préoccupe.
    Pour effacer un enregistrement j'utilise le numéro de l'enregistrement qui est égal à la clé primaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MENCOURS:=Sqlite3.RecNo;
      MQ:='Delete from '+MTABLE+' WHERE K_AUTOMAT='+IntToStr(MENCOURS);
      Sqlite3.SQL:=MQ;
      Sqlite3.ExecSQL;
      Sqlite3.ApplyUpdates;
      Sqlite3.SQL:='Select * from '+MTABLE;
      Sqlite3.ExecSQL;
      Sqlite3.RefetchData;
    K_AUTOMAT étant ma clé primaire et est au départ égale au numéro de l'enregistrement dans ma table.
    Mais après l'effacement je voudrais bien pouvoir réorganiser ma table pour que cette clé soit toujours égale au numéro d'enregistrement.
    deuxième question sous lazarus et sqlite y a-t-il une commande de compactage et de réindexation comme avec les fichiers dbase ?
    Merci de bien vouloir me conseiller.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ovni76 Voir le message
    Mais après l'effacement je voudrais bien pouvoir réorganiser ma table pour que cette clé soit toujours égale au numéro d'enregistrement.
    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MENCOURS:=Sqlite3.RecNo;
      MQ:='Delete from '+MTABLE+' WHERE K_AUTOMAT='+IntToStr(MENCOURS);
      Sqlite3.SQL:=MQ;
      Sqlite3.ExecSQL;
      Sqlite3.ApplyUpdates;
      // Decrémenter les numéros supérieurs 
      MQ:='UPDATE '+MTABLE+' SET K_AUTOMAT=K_AUTOMAT - 1 WHERE K_AUTOMAT>'+IntToStr(MENCOURS);
      Sqlite3.SQL:=MQ;
      Sqlite3.ExecSQL;
      Sqlite3.ApplyUpdates;
      Sqlite3.SQL:='Select * from '+MTABLE;
      Sqlite3.ExecSQL;
      Sqlite3.RefetchData;
    deuxième question sous lazarus et sqlite y a-t-il une commande de compactage et de réindexation comme avec les fichiers dbase ?
    Aucune idée !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Merci SergioMaster,
    La mise à jour de la clé fonctionne très bien, encore un petit pas de plus pour moi.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    en cherchant un peu , car je suis curieux , j'ai trouvé ceci à propos du compactage

    Simply execute the "VACUUM" Sql statement ...

    using (SQLiteCommand cmd = conn.CreateCommand())
    {
    cmd.CommandText = "VACUUM";
    cmd.ExecuteNonQuery();
    }
    te reste à le traduire puis a cliquer sur avec un peu de chance , après , bien sur, nous avooir indiqué ce que tu as fait
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Oui, j(ai aussi trouvé cette valeur, mais comme moi et l'anglais nous ne sommes pas copains, je n'ai pas encore trouvé la bonne syntaxe.
    Mais je chercherais et je donnerais le résultat.
    Merci encore

  6. #6
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonjour "ET",

    Pourquoi veux tu que ton numéro de clé soir identique au numéro d'enreg ? c'est inutile et risque un jour de te gêner dans certains cas !

    L'utilisation d'un identifiant unique (pas forcement ta clé primaire) permet justement de te positionner sur le bonne enregistrement pour pouvoir le modifier et ou le supprimer...

    Bonne apprentissage
    Cordialement,

  7. #7
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Salut Chris37,
    Je dirais, je réalise des opérations programmées de lecture d'une table que j'appelle import et je recopie dans une autre table que j'appelle bank les informations non encore inscrites de la première et non vérifiées, si je trouve des informations déjà vérifiées je supprime l'enregistrement de la table import.
    A la fin ma table import doit être vide.
    Je fais de même pour la mise en archive des informations anciennes de bank.
    Alors avec des tables dbase et delphi sous xp, j'avais trouvé cette solution du numéro d'enregistrement, mais je n'avais pas de champ kley primary dont je n'ai pas encore bien compris la raison et pensant qu'il n'était pas bon d'avoir cette clé avec des valeurs "aléatoires", j'ai raisonné comme pour une réindexation sous dbase.
    Comme apprenti je suis ouvert à tout conseil que je pourrais comprendre.
    Je le rappelle je suis un amateur autodidacte.
    Merci pour ton aide.
    Une remarque, je regrette le ton et la réactivité de ton ancien forum et sa spécialisation.

  8. #8
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Pour SergioMaster,
    J'ai trouvé la formule pour utiliser VACUUM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sqlite3.SQL:='VACUUM LCL';
    Il faut lui donner à la commande juste le nom de la base et pas comme sous dbase le nom de chaque table à compacter.
    Donc pour la commande de compactage c'est résolu.
    Merci

  9. #9
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Le sujet pour moi est clos
    Merci pour l'aide

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

Discussions similaires

  1. [Lazarus] Ecrire dans une table SQlite
    Par ovni76 dans le forum Lazarus
    Réponses: 3
    Dernier message: 02/07/2009, 11h34
  2. [Lazarus] Ecrire depuis une appli Lazarus dans une table Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 9
    Dernier message: 16/06/2009, 18h54
  3. Réponses: 2
    Dernier message: 10/06/2009, 16h49
  4. Comment sauvegarder un fichier dans une table sqlite?
    Par Hamdi Hedhili dans le forum SQLite
    Réponses: 2
    Dernier message: 13/11/2008, 09h28
  5. MAJ table Sqlite
    Par Ggamer dans le forum Général Python
    Réponses: 2
    Dernier message: 29/04/2008, 17h45

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