Microsoft KB Archive/168521: Difference between revisions

From BetaArchive Wiki
(importing KB archive)
 
m (Text replacement - """ to """)
Line 48: Line 48:
== SUMMARY ==
== SUMMARY ==


This article demonstrates how you can retrieve default values for a deleted record being reused or "recycled" in Visual FoxPro 3.x and 5.x.
This article demonstrates how you can retrieve default values for a deleted record being reused or "recycled" in Visual FoxPro 3.x and 5.x.


</div>
</div>
Line 70: Line 70:
If no deleted records are found, a new record is appended:
If no deleted records are found, a new record is appended:
<pre class="codesample">  LOCAL lcDeleted, dExpr, nCount, a_field[1]
<pre class="codesample">  LOCAL lcDeleted, dExpr, nCount, a_field[1]
   lcDeleted = set(&quot;DELETED&quot;)
   lcDeleted = set("DELETED")
   SET DELETED OFF
   SET DELETED OFF


Line 84: Line 84:
     * Retrieve all default values from the base table.
     * Retrieve all default values from the base table.
       FOR nCount = 1 to AFIELDS(a_field)
       FOR nCount = 1 to AFIELDS(a_field)
           dExpr = DBGetProp(CursorGetProp(&quot;SourceName&quot;)+ ;
           dExpr = DBGetProp(CursorGetProp("SourceName")+ ;
                   &quot;.&quot; + a_field[nCount, 1], &quot;Field&quot;, &quot;DefaultValue&quot;)
                   "." + a_field[nCount, 1], "Field", "DefaultValue")
           * if there is a default value, use it
           * if there is a default value, use it
           IF !Empty(dExpr)
           IF !Empty(dExpr)

Revision as of 11:04, 21 July 2020

Knowledge Base


How To Reapply Default Values to Reuse/Recycle Deleted Record

Article ID: 168521

Article Last Modified on 7/1/2004



APPLIES TO

  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition



This article was previously published under Q168521

SUMMARY

This article demonstrates how you can retrieve default values for a deleted record being reused or "recycled" in Visual FoxPro 3.x and 5.x.

MORE INFORMATION

In Visual FoxPro, the DELETE command does not delete a record physically; rather, it only marks the record for deletion. Using the RECALL command unmarks the deleted record.

In order to physically delete a record from a table in Visual FoxPro, use the PACK command. Using PACK requires the table to be opened exclusively.

In a multi-user environment, it may be difficult to obtain exclusive use of the file for packing. To work around this problem, you can recycle deleted records by using the technique illustrated below.

This article assumes you have an existing database and certain fields have default values in the table.

The following code snippet does the following:

  1. Looks for a deleted record.
  2. Retrieves the default values from the table in the database.
  3. Re-uses the first deleted record found.

If no deleted records are found, a new record is appended:

   LOCAL lcDeleted, dExpr, nCount, a_field[1]
   lcDeleted = set("DELETED")
   SET DELETED OFF

   * Looks for deleted record in the table
   LOCATE FOR DELETED()

   IF FOUND()
      * bring it back to life and blank its fields
      RECALL
      * blank out the contain of the deleted record
      BLANK

     * Retrieve all default values from the base table.
      FOR nCount = 1 to AFIELDS(a_field)
          dExpr = DBGetProp(CursorGetProp("SourceName")+ ;
                  "." + a_field[nCount, 1], "Field", "DefaultValue")
          * if there is a default value, use it
          IF !Empty(dExpr)
             REPLACE (a_field[nCount, 1]) WITH EVAL(dExpr)
          ENDIF
     ENDFOR
   ELSE
     APPEND BLANK
   ENDIF

   SET DELETED &lcDeleted
                

In order to retrieve default values from the database, the database needs to be open at all times. If the database is not open, an error occurs.

NOTE: Unused space in memo files will not be recycled. To recover unused space in memo files, you must issue a PACK MEMO command (which requires that the table be opened EXCLUSIVELY).

Keywords: kbhowto KB168521