Suchen der aktuellen Position in einem DAO-Recordset

In einigen Situationen müssen Sie bestimmen, wie weit Sie die aktuelle Datensatzposition durch ein Recordset-Objekt verschoben haben, und möglicherweise die aktuelle Datensatzposition für einen Benutzer angeben. Beispielsweise möchten Sie die aktuelle Position auf einer Skala, einem Meter oder einem ähnlichen Steuerelement angeben. Zur Angabe der aktuellen Position stehen zwei Eigenschaften zur Verfügung: die AbsolutePosition-Eigenschaft und die PercentPosition-Eigenschaft .

Der Wert der AbsolutePosition-Eigenschaft ist die Position des aktuellen Datensatzes relativ zu 0. Stellen Sie sich diese Eigenschaft jedoch nicht als Datensatznummer vor. Wenn der aktuelle Datensatz nicht definiert ist, gibt die AbsolutePosition-Eigenschaft 1 zurück. Darüber hinaus gibt es keine Garantie, dass ein Datensatz die gleiche absolute Position hat, wenn das Recordset-Objekt neu erstellt wird, da die Reihenfolge der einzelnen Datensätze innerhalb eines Recordset-Objekts nicht garantiert wird, es sei denn, er wird mit einer SQL-Anweisung erstellt, die eine ORDER BY-Klausel enthält.

Die PercentPosition-Eigenschaft zeigt die aktuelle Position als Prozentsatz der Gesamtzahl der Datensätze an, die von der RecordCount-Eigenschaft angegeben werden. Da die RecordCount-Eigenschaft die Gesamtzahl der Datensätze im Recordset-Objekt erst wiedergibt, wenn das Recordset vollständig aufgefüllt wurde, gibt die PercentPosition-Eigenschaft nur die aktuelle Datensatzposition als Prozentsatz der Anzahl von Datensätzen an, auf die seit dem Öffnen des Recordset-Objekts zugegriffen wurde.

Um sicherzustellen, dass die PercentPosition-Eigenschaft die aktuelle Datensatzposition relativ zum gesamten Recordset-Objekt widerspiegelt, verwenden Sie die Methoden MoveLast und MoveFirst unmittelbar nach dem Öffnen des Recordset-Objekts. Dadurch wird das Recordset-Objekt vollständig aufgefüllt, bevor Sie die PercentPosition-Eigenschaft verwenden. Wenn Sie über ein großes Resultset verfügen, kann die Verwendung der MoveLast-Methode für Recordsets , die nicht vom Typ Tabelle sind, lange dauern.

Hinweis

Die PercentPosition-Eigenschaft ist nur eine Annäherung und sollte nicht als wichtiger Parameter verwendet werden. Diese Eigenschaft ist gut dazu geeignet, einen Indikator zu steuern, der den Fortschritt eines Benutzers anzeigt, der sich durch eine Reihe von Datensätzen bewegt. Beispielsweise möchten Sie möglicherweise ein Steuerelement, das den Prozentsatz der vollständigen Datensätze angibt.

Im folgenden Beispiel wird ein Recordset-Objekt für eine Tabelle namens Employees geöffnet. Die Prozedur wechselt dann durch die Tabelle Employees und verwendet die SysCmd-Methode , um eine Statusanzeige anzuzeigen, die den Prozentsatz der verarbeiteten Tabelle anzeigt. Wenn das Einstellungsdatum des Mitarbeiters vor dem 1. Januar 1993 liegt, wird der Text "Leitende Mitarbeiter" an das Feld Notizen angefügt.

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

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.