Table of contents
XML
TOC
Collapse the table of content
Expand the table of content

Buscar la posición actual en un conjunto de registros DAOFind the Current Position in a DAO Recordset

office 365 dev account|Última actualización: 29/09/2017
|
1 Colaborador

En algunas situaciones, necesitará determinar hasta qué punto a través de un conjunto de registros de objetos ha movido la posición del registro actual y quizás indicar la posición del registro actual a un usuario. Por ejemplo, desea indicar la posición actual en un dial, medidor o tipo de control similar. Existen dos propiedades que indican la posición actual: la propiedad AbsolutePosition y la propiedad PercentPosition .In some situations, you need to determine how far through a Recordset object you have moved the current record position, and perhaps indicate the current record position to a user. For example, you may want to indicate the current position on a dial, meter, or similar type of control. Two properties are available to indicate the current position: the AbsolutePosition property and the PercentPosition property.

El valor de la propiedad AbsolutePosition es la posición del registro actual con relación a 0. Sin embargo, no considere esta propiedad como un número de registro; Si el registro actual no está definido, la propiedad AbsolutePosition devuelve 1. Además, no hay ninguna garantía de que un registro tendrá la misma posición absoluta si se vuelve a crear el objeto Recordset porque el orden de los registros individuales en un objeto Recordset no está garantizado a menos que se cree con un SQL instrucción que incluya una cláusula ORDER BY.The AbsolutePosition property value is the position of the current record relative to 0. However, do not think of this property as a record number; if the current record is undefined, the AbsolutePosition property returns 1. In addition, there is no assurance that a record will have the same absolute position if the Recordset object is recreated because the order of individual records within a Recordset object is not guaranteed unless it is created with an SQL statement that includes an ORDER BY clause.

La propiedad PercentPosition muestra la posición actual expresada como un porcentaje del número total de registros indicado por la propiedad RecordCount . Dado que la propiedad RecordCount no refleja el número total de registros del objeto Recordset hasta que el objeto Recordset ha rellenado por completo, la propiedad PercentPosition refleja sólo la posición de registro actual como un porcentaje del número de registros que se ha tenido acceso desde que se abrió el conjunto de registros . Para asegurarse de que la propiedad PercentPosition refleja la posición del registro actual con respecto a todo el conjunto de registros, utilice los métodos MoveLast y MoveFirst inmediatamente después de abrir el objeto Recordset. Llena totalmente el objeto Recordset antes de utilizar la propiedad PercentPosition . Si ha configurado un gran resultado, utilizando el método MoveLast puede tardar mucho tiempo para conjuntos de registros que no sean de tipo tabla.The PercentPosition property shows the current position expressed as a percentage of the total number of records indicated by the RecordCount property. Because the RecordCount property does not reflect the total number of records in the Recordset object until the Recordset has been fully populated, the PercentPosition property reflects only the current record position as a percentage of the number of records that have been accessed since the Recordset was opened. To make sure that the PercentPosition property reflects the current record position relative to the entire Recordset, use the MoveLast and MoveFirst methods immediately after opening the Recordset. This fully populates the Recordset object before you use the PercentPosition property. If you have a large result set, using the MoveLast method may take a long time for Recordsets that are not of type table.

Nota La propiedad PercentPosition es sólo una aproximación y no debe utilizarse como un parámetro crítico. Esta propiedad está especialmente indicada para controlar un indicador que marca el progreso del usuario mientras se mueve por un conjunto de registros. Por ejemplo, puede que desee un control que indica el porcentaje de registros completados.Note The PercentPosition property is only an approximation and should not be used as a critical parameter. This property is best suited for driving an indicator that marks a user's progress while moving though a set of records. For example, you may want a control that indicates the percentage of records completed.

En el ejemplo siguiente se abre un objeto Recordset en una tabla denominada a Employees. A continuación, el procedimiento se mueve a través de la tabla Employees y utiliza el método SysCmd para mostrar una barra de progreso con el porcentaje de la tabla que se ha procesado. Si la fecha de contratación del empleado es antes del 1 de enero de 1993, el texto "Senior Staff" se anexa al campo Notas.The following example opens a Recordset object on a table called Employees. The procedure then moves through the Employees table and uses the SysCmd method to display a progress bar showing the percentage of the table that has been processed. If the hire date of the employee is before Jan. 1, 1993, the text "Senior Staff" is appended to the Notes field.

Sub AddEmployeeNotes() 

Dim dbsNorthwind As DAO.Database 
Dim rstEmployees As DAO.Recordset 
Dim strMsg As String 
Dim intRet As Integer 
Dim intCount As Integer 
Dim strSQL As String 
Dim sngPercent As Single 
Dim varReturn As Variant 
Dim lngEmpID() As Long 

On Error GoTo ErrorHandler 

   Set dbsNorthwind = CurrentDb 

   strSQL = "SELECT * FROM Employees" 
   Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset) 

   With rstEmployees 
      If .EOF Then            ' If no records, exit. 
         Exit Sub 
      Else 
         strMsg = "Processing Employees table..." 
         intRet = SysCmd(acSysCmdInitMeter, strMsg, 100) 
      End If 

      Do Until .EOF 
         If !HireDate < #1/1/93# Then 
            .Edit 
            !Notes = !Notes &; ";" &; "Senior Staff" 
            .Update 
         End If 

         If .PercentPosition <> 0 Then 
            intRet = SysCmd(acSysCmdUpdateMeter, .PercentPosition) 
         End If 
         .MoveNext 
      Loop 
   End With 

   intRet = SysCmd(acSysCmdRemoveMeter) 

   rstEmployees.Close 
   dbsNorthwind.Close 

   Set rstEmployees = Nothing 
   Set dbsNorthwind = Nothing 

Exit Sub 

ErrorHandler: 
   MsgBox "Error #: " &; Err.Number &; vbCrLf &; vbCrLf &; Err.Description 
   varReturn = SysCmd(acSysCmdSetStatus, " ") 
End Sub
© 2017 Microsoft