DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 119116 - Dernière mise à jour: jeudi 30 octobre 2003 - Version: 2.0

 

Sommaire

Résumé

Le passage suivant s'affiche dans la page «Fonctionnalités de Professionnel», livre 2, 141 :
dBASE et FoxPro les systèmes de bases de données ne supprime pas physiquement les enregistrements, mais simplement les marquer pour suppression ultérieurement. Vous devez compresser le .dbf fichier (à l'aide de vos propres utilitaires) pour supprimer ces enregistrements de la .dbf fichiers. Le CompactDatabase fonction n'a pas d'incidence sur les tables attachées.

Cet article vous apprend à ZAP et/ou PACK un dBASE ou FoxPro table dans Microsoft Visual Basic version 3.0 sans avoir besoin d'utilitaires distincts.

Plus d'informations

<appname>Pour pouvoir ZAP ou PACK vos fichiers .dbf, vous devez disposer de l'entrée suivante dans votre fichier .ini VB.INI ou <nomapp>:
   [dBase ISAM]
   Deleted=On
				

Cela va filtrer les enregistrements supprimés pour qu'ils n'apparaissent pas dans les jeux d'enregistrements.

Pour effectuer un ZAP, il vous souhaitez d'exécuter une requête action DELETE. Par exemple, l'exemple suivant marque tous les enregistrements de la table AUTHORS.DBF comme supprimé :
   Dim db As database
   Set db = OpenDatabase("c:\dBaseIII", false, false, "dBase III")
   'Open the database.

   db.Execute "Delete From Authors"       'Execute the delete action query.
   db.Close                               'Close the database.
				

Remarque : Pour les très grandes tables, il est plus efficace pour supprimer l'objet TableDef qui représente la table de la collection TableDefs de la base de données et puis recréer la structure de la table. Veuillez consulter les articles Q110959 et 108147  (http://support.microsoft.com/kb/108147/EN-US/ ) pour plus d'informations sur cette approche.

La sous-routine suivante vous montre comment effectuer un PACK. Essentiellement, vous copiez tous les enregistrements à une nouvelle table temporaire, supprimez l'ancienne, puis renommez la table temporaire en tant que le nom d'origine.

Exemple de code

   Sub Pack_DBF (db As Database, tblname As String)
     Const MB_YESNO = 4                     ' Yes and No buttons
     Const MB_ICONEXCLAMATION = 48          ' Warning message
     Const IDYES = 6                        ' Yes button pressed

     Dim dbdir As String, tmp As String 'Temp variables
     Dim i As Integer, ret As Integer   'Counter and return value of MsgBox

     Dim flags As Integer                   'Flags for MsgBox
     ReDim idxs(0) As New index             'Holds indexes

     On Error GoTo PackErr

     flags = MB_YESNO Or MB_ICONEXCLAMATION
     ret = MsgBox("Remove All Deleted Records in " & tblname & "?", flags)
     If ret = IDYES Then
       dbdir = db.Name + "\"                      'Hold database directory

       'Delete the temp file if it exists.
       If Dir$(dbdir & "p_a_c_k.*") <> "" Then
         Kill dbdir & "p_a_c_k.*"
       End If

       'Store the indexes.
       For i = 0 To db.TableDefs(tblname).Indexes.Count - 1
         ReDim Preserve idxs(i + 1)
         idxs(i).Name = db.TableDefs(tblname).Indexes(i).Name
         idxs(i).Fields = db.TableDefs(tblname).Indexes(i).Fields
         idxs(i).Primary = db.TableDefs(tblname).Indexes(i).Primary
         idxs(i).Unique = db.TableDefs(tblname).Indexes(i).Unique
       Next

       'Create the new table without the deleted records.
       db.Execute "Select * into [p_a_c_k] from " & tblname

       'Delete the current table.
       db.TableDefs.Delete tblname

       'Rename the DBF file and any memo files.
       tmp = Dir$(dbdir & "p_a_c_k.*")
       Do While tmp <> ""
       'Rename with the correct file extension; this should be on one line.

           Name dbdir & tmp As dbdir & tblname &
                                Right$(tmp, Len(tmp) - InStr(tmp, ".") + 1)
           tmp = Dir$
       Loop

       'Refresh the tabledefs and add the indexes to the new table.
       db.TableDefs.Refresh
       For i = 0 To UBound(idxs) - 1
         db.TableDefs(tblname).Indexes.Append idxs(i)
       Next

       MsgBox "'" & tblname & "' successfully Packed!", MB_ICONEXCLAMATION
     End If
     Exit Sub

   PackErr:
     MsgBox Error$
     Exit Sub

   PackEnd:
   End Sub
				

L'exemple de code suivant montre comment appeler la sous-routine ci-dessus. Tout d'abord, vous ouvrez la base de données que la table est en, puis indiquez l'objet de base de données et le nom de la table à utiliser pour le PACK à la sous-routine. Veillez à ce qu'il n'y a pas tous les jeux d'enregistrements ouverts sur la table que vous essayez de compresser ou que vous obtiendrez une erreur.
   'To open file C:\SAMPLES\FOXTBL.DBF
   Dim db As Database
   Set db = OpenDatabase("c:\samples\foxtbl", False, False, "foxpro 2.5")
   Call Pack_DBF(db, "foxtbl")
   db.Close
				

Remarque : Les méthodes ci-dessus ne conservent pas mise en forme des champs numériques pour notre dBASE et FoxPro tables. Pour contourner cette limitation, vous devez conserver un fichier DBF de modèle créé à partir de dBASE ou FoxPro qui contient la mise en forme vous avez besoin et utiliser une instruction INSERT INTO au lieu de l'instruction SELECT INTO illustrée ci-dessus.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 3.0 Édition professionnelle
Mots-clés : 
kbmt KB119116 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 119116  (http://support.microsoft.com/kb/119116/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Article KB retiré.Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store