Nous adaptons une base de données de serveur SQL par défragmentation d'index ou réindexation ou suppression et reconstruction d'un index. Existe-t-il de telles techniques de réglage des données pour Foxpro?Réglage des données FoxPro
Merci, Chak.
Nous adaptons une base de données de serveur SQL par défragmentation d'index ou réindexation ou suppression et reconstruction d'un index. Existe-t-il de telles techniques de réglage des données pour Foxpro?Réglage des données FoxPro
Merci, Chak.
pour les tables ... défragmentation
USE YourTable EXCLUSIVE
PACK
si votre table possède plusieurs champs mémo faire
si la tablePACK MEMO
a des index, le pack leur réindexer automatiquement.
Comme l'a mentionné Arnis, la plupart des choses dans VFP sont basées sur des tables ... des formulaires, des classes, des rapports bien qu'ils aient des extensions différentes. Ainsi, vous pouvez faire
use YourForm.scx exclusive
pack memo
use YourClassLib.vcx exclusive
pack memo
use YourReport.frx exclusive
pack memo
use YourProject.pjx exclusive
pack memo
De plus, si vos tables .dbf régulières que vous voulez tuer les index individuels ...
use YourTable exclusive
delete tag MyIndexTag
ou, pour supprimer tous les index
delete tag all
Réindexer et emballer les tables aide. Même les bibliothèques de classes (.vcx) sont des tables qui peuvent être compressées. Mais malheureusement, je ne me souviens pas des commandes exactes.
Une autre chose à garder à l'esprit est que les bases de données FoxPro sont juste une collection de fichiers sur le serveur. Par conséquent, des choses comme la fragmentation du disque serveur, et s'assurer que l'antivirus est exclu de ces fichiers, peuvent aussi faire une grande différence.
Pour la réindexation, vous feriez mieux de le faire vous-même avec une procédure comme celle-ci: REINDEX échoue parfois à corriger la corruption d'index.
procedure reindextable
lparameters cTable
local cDBC, nTagCount, cTag, nTag
local array arrTags[1]
if pcount() = 0
? "No parameter"
return -1
endif
close tables all
use (cTable) exclusive
? "Reindexing " + alltrim(alias())
nTagCount = tagcount()
if nTagCount = 0
? "No tags found"
return -1
endif
dimension arrTags[nTagCount, 7]
for nTag = 1 to nTagCount
arrTags[nTag, 1] = tag(nTag)
arrTags[nTag, 2] = key(nTag)
arrTags[nTag, 3] = for(nTag)
arrTags[nTag, 4] = unique(nTag)
arrTags[nTag, 5] = primary(nTag)
arrTags[nTag, 6] = candidate(nTag)
arrTags[nTag, 7] = descending(nTag)
endfor
* OK, we have the info to re-create the tags. Now delete the existing tags.
delete tag all
* Now re-create the tags
for nTag = 1 to nTagCount
if arrTags[nTag, 5]
* Primary key; need to use ALTER TABLE
cTag = "ALTER TABLE " + cTable + " ADD PRIMARY KEY " + arrTags[nTag, 2]
* Thanks to Anders Altberg for the info that you can add a filter to a PK, as long
* as the TAG appears *after* the filter.
if not empty (arrTags[nTag, 3])
cTag = cTag + " FOR " + arrTags[nTag, 3]
endif
cTag = cTag + " TAG " + arrTags[nTag, 1]
else
* Regular index (or possibly a Candidate)
cTag = "INDEX ON " + arrTags[nTag, 2] + " TAG " + arrTags[nTag, 1]
if not empty (arrTags[nTag, 3])
cTag = cTag + " FOR " + arrTags[nTag, 3]
endif
if arrTags[nTag, 4]
cTag = cTag + " UNIQUE "
endif
if arrTags[nTag, 6]
cTag = cTag + " CANDIDATE "
endif
if arrTags[nTag, 7]
cTag = cTag + " DESC "
endif
endif
* This will create the tag
&cTag
? cTag
endfor
? "Success."
return 0
+1 Bon point Stuart. Je dois être oublieux dans mon grand âge ... – kevinw
Si vous ne disposez pas d'une procédure réindexation créé, à court et obtenez Stonefield Database Toolkit:
http://stonefield.com/sdt.aspx
L'une des choses qu'il fait est de construire des métadonnées sur les index. Il a une commande pour réindexer toutes les tables, ou une table à la fois. Vous ajoutez ou supprimez un index, pas besoin de le suivre ou de modifier votre routine de réindexation. Validez les métadonnées (fonctionnalité intégrée) et envoyez les métadonnées mises à jour avec vos fichiers DBC et mettez à jour. Les tables de production (structures et index) sont mises à jour pour correspondre à ce que vous avez en développement.
La plupart des développeurs VFP utilisant des DBF contenus dans une base de données trouvent cet outil indispensable. Comme pour le PACKing de votre code source (SCX, VCX, FRX, LBX, MNX, PJX), tout ce que vous avez à faire est un Rebuild All lorsque vous générez le projet. VFP va emballer tout le code source derrière la construction. Cela réduira la taille de l'exécutable résultant, pas optimiser ou ajuster la base de données.
Rick
PACK peut être dangerous- si quelque chose arrive (accident, panne d'électricité, etc.) lors de la commande, la table est susceptible d'être corrompu. TOUJOURS faire une sauvegarde avant de PACKER une table.
Nous utilisons rarement PACK à mon bureau car nous supprimons rarement autre chose que des enregistrements dans des tables temporaires - tout le reste est conservé à des fins historiques. Cependant, il vaut mieux utiliser REINDEX de temps en temps.
BTW, si vous faites un PACK, les champs mémo seront toujours emballés ainsi que la suppression des lignes marquées pour la suppression. PACK MEMO efface uniquement l'espace dans les champs de mémo, mais ne supprime pas les lignes marquées pour la suppression. – kevinw