titre_site.jpg (51607 octets)

PACK

Enlève de la table en cours tous les enregistrements marqués pour suppression. Cette commande est sans effet lors de l'accès à des tables Paradox ou SQL, leurs enregistrements étant enlevés immédiatement lorsqu'ils sont supprimés. Seules les tables au format dBase (.dbf), à ma connaisance,  gèrent la suppression par soft. D'ou cette commande PACK pour la suppression physique des enregistrements marqués supprimés.

Syntaxe

PACK

 ico_MsDos.jpg (1668 octets) vdb5.gif (351 octets)  Description


PACK permet d'enlever de la table en cours les enregistrements qui ont été préalablement marqués pour suppression avec la commande DELETE. Dans un réseau, il faut avoir ouvert la table en accès exclusif avant d'utiliser PACK.
Après l'exécution de la commande PACK, l'espace disque occupé par les enregistrements supprimés est restitué lors de la fermeture de la table. Tous les fichiers index ouverts sont automatiquement réindexés après l'exécution de PACK. Il faut utiliser REINDEX pour mettre à jour les index fermés.

Cependant, après l'utilisation de la commande PACK, l'espace des fichiers mémo (.DBT) associés aux enregistrements supprimés n'est pas diminué. Pour récupérer l'espace d'un fichier mémo, il faut utiliser COPY pour copier la table d'origine.

Note : Plus2_5-Icon.jpg (1250 octets) Un test personnel semble montrer que dans dBase Plus 2.6.0 le fichier .dbt est en fait diminué, l'utilisation de COPY ne serait plus nécessaire.  A vérifier, car le principal rédacteur pour dBase Ken Mayer pense que le fonction n'a pas évoluée avec les versions 32 bits, COPY serait toujours nécessaire.


Il faut utiliser PACK avec précaution. Les enregistrements marqués pour suppression qui n'ont pas encore été enlevés avec PACK peuvent être restaurés dans la table en utilisant RECALL. Les enregistrements éliminés avec PACK sont définitivement perdus et ne peuvent être récupérés.

SET DELETED ON propose certains des avantages de PACK sans retirer effectivement les enregistrements d'une table. Avec SET DELETED ON, la plupart des commandes fonctionnent comme si les enregistrements marqués pour suppression étaient éliminés de la table.
Pour retirer définitivement tous les enregistrements de la table, il faut utiliser la commande ZAP.

Plus2_5-Icon.jpg (1250 octets) xDML vers ooDML

La commande xBase "PACK" est utilisée pour supprimer les enregistrements marqués supprimés dans une table .DBF. Ceci est basé sur la "suppression par soft".

Alors que le OODML ne supporte pas directement la "suppression par soft", la commande PACK possède un équivalent, la méthode packTable() de l'objet de base de données. Cette méthode fonctionne exactement comme la commande XBase PACK, notamment en exigeant l'utilisation EXCLUSIVE de la table pour effectuer la compression. Voir SET EXCLUSIVE pour plus de détails ...

La commande est simplement:

_app.databases[1].packTable("nomdelatable")


Si vous utilisez un alias BDE, utilisez l'objet base de données associé à cet alias. Si vous utilisez l'exemple, la méthode packTable tentera de trouver la table dans le répertoire local.

bug_jpg.jpg (2635 octets)  Le point à surveiller :

A lancer régulièrement :

A défaut d'avoir lu des commentaires mentionnant un bug pour cette commande, il semble opportun de rappeler que vous devriez toujours lancer périodiquement un "PACK" de la table ... En effet les lignes supprimées sont toujours dans la table lorsque vous utilisez un DBF... Outre que cela augmente inutilement sa taille, certaines commandes pourraient conduire à des résultats semblant bizarres s'il advenait que les enregistrements notés supprimés étaient effectivement pris en compte (SET DELETED OFF).

Voir à ce sujet les commentaires sur la commande Delete

vdb7.gif (353 octets) Plus2_5-Icon.jpg (1250 octets) Tables de niveau 7

Attention, si vous ajoutez un champ AutoIncrement à une table, cela entraine automatiquement l'exécution de la commande PACK. Vous ne pourrez donc plus récupérer les enregistrements marqués précédemment pour effacement.

 

retour

Sources :

Aide Visual dbase V5.7

http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm

Le groupe de discussion dbase.bug.report

Aide dBase Plus 2.6.0.

dBase Plus version 2.6.0

Si vous voyez des erreurs, n'hésitez pas à le signaler.

Dernière modification : samedi 07 août 2010

©  M.A.