2009-10-16 5 views
0

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.

Répondre

2

pour les tables ... défragmentation

USE YourTable EXCLUSIVE 
PACK 

si votre table possède plusieurs champs mémo faire

si la table
PACK 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 
+0

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

0

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.

2

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.

1

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 
+0

+1 Bon point Stuart. Je dois être oublieux dans mon grand âge ... – kevinw

0

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

0

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.