
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
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 :
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.
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.
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
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.
|