Haben Sie sich auch schon einmal gewundert, dass hin und wieder die beim Abfragen der Anzahl der Datensätze eines Recordsets eine falscher Wert zurückgegeben wird? Dies ist immer dann der Fall, wenn man hierzu die RecordCount-Eigenschaft des Recordset-Objekts oder des TableDefs-Objekts verwendet, nachdem man viele Datensätze hinzugefügt oder gelöscht hat. In diesem Fall hilft nur das "Komprimieren" der Datenbank über die "CompactDatabase"-Methode. Danach gibt "RecordCount" wieder die korrekte Anzahl der Datensätze zurück. Da man aber meist nicht weiß, ob die von der RecordCount-Eigenschaft zurückgegebene Anzahl Datensätze korrekt oder nicht korrekt ist, möchten wir Ihnen mit diesem Tipp eine Alternative zur Ermittlung der Datensatz-Anzahl zeigen. Hierzu erstellen wir ein Recordset, wobei wir einfach die Summe aller Felder als SQL-Aggregatfunktion SUM(*) nehmen. Das Eregbnis ist dann die korrekte Anzahl der vorhandenen Datensätze. Das Ganze packen wir natürlich in eine universelle Funktion mit einem optionalen Parameter für eine evtl. benötigte WHERE-Bedingung, falls die Summe der Datensätze für bestimmte Kriterien ermittelt werden soll. ' korrekte Anzahl der Datensätze ermitteln Public Function dbRecCount(oDB As Database, ByVal sTable As String, _ Optional ByVal sWHERE As String = "") As Long Dim oRs As DAO.Recordset Dim sSQL As String ' Recordset erstellen sSQL = "SELECT Count(*) FROM " & sTable & IIf(Len(sWHERE) > 0, " WHERE " & sWHERE, "") Set oRs = oDB.OpenRecordset(sSQL, dbOpenSnapshot, dbOpenForwardOnly) If oRs.RecordCount > 0 Then dbRecCount = oRs(0) End If oRs.Close Set oRs = Nothing End Function Beispiel für den Aufruf: ' Anzahl Datensätze der Tabelle "Kunden" ermitteln Dim nRecCount As Long nRecCount = dbRecCount(oDB, "Kunden") ' Anzahl Datensätze der Tabelle "Kunden" ermitteln, deren ' Namen mit A beginnen nRecCount = dbRecCount(oDB "Kunden", "Name LIKE 'A*') Autom. Komprimieren der Datenbank Private Sub Main() ' Start-Prozedur ... ' Prüfen, ob Datenbank komprimiert werden muss Dim oDB As DAO.Database Set oDB = DBEngine.OpenDatabase(App.Path & "\KUNDEN.MDB") If dbRecCount(oDB, "Kunden") <> oDB.TableDefs("Kunden").RecordCount Then ' Datenbank muss komprimiert werden! oDB.Close Set oDB = Nothing dbCompact App.Path & "\KUNDEN.MDB" Else oDB.Close Set oDB = Nothing End If ... End Sub Den Code der Funktion "dbCompact" finden Sie hier: Dieser Tipp wurde bereits 24.663 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |