Expandir Minimizar

Cómo: Buscar la posición actual en un conjunto de registros de DAO

Office 2013

Última modificación: jueves, 30 de junio de 2011

Hace referencia a: Access 2013 | Office 2013

En ocasiones, necesitará determinar hasta dónde ha movido la posición del registro actual en un objeto Recordset , y quizás indicar dicha posición a un usuario.Por ejemplo, puede necesitar indicar la posición actual en un dial, un medidor o un tipo de control similar.Existen dos propiedades que indican la posición actual: la propiedad AbsolutePosition y la propiedad PercentPosition .

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 da como resultado 1.Por otra parte, tampoco hay garantía de que un registro tendrá la misma posición absoluta si se vuelve a crear el objeto Recordset, ya que el orden de los registros individuales en un objeto de este tipo no está garantizado a menos que se cree con una instrucción SQL que incluya una cláusula ORDER BY.

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 en el objeto Recordset hasta que éste se llena, la propiedad PercentPosition únicamente refleja la posición del registro actual expresada como un porcentaje del número de registros a los que se ha tenido acceso desde que se abrió el objeto Recordset.Para asegurarse de que la propiedad PercentPosition refleja la posición del registro actual con relación a todo el Recordset, utilice los métodos MoveLast y MoveFirst inmediatamente después de abrir el objeto Recordset.Esto llenará dicho objeto antes de que utilice la propiedad PercentPosition.Si tiene un conjunto de resultados grande, es posible que el uso del método MoveLast consuma bastante tiempo para los Recordsets que no sean de tipo tabla.

Nota Nota

La propiedad PercentPosition es sólo una aproximación y no se debe utilizar como un parámetro crítico.Esta propiedad está especialmente indicada para controlar un indicador que marque el progreso del usuario mientras éste se mueve por un conjunto de registros.Por ejemplo, puede necesitar un control que indique el porcentaje de registros completados.

El ejemplo siguiente abre un objeto Recordset en una tabla denominada Employees (Empleados).A continuación, el procedimiento se mueve por dicha tabla 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 contratación del empleado es anterior al 1 de enero de 1993, el texto "Senior Staff" (Empleado veterano) se agregará al campo Notes (Notas).

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
Mostrar:
© 2014 Microsoft