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 9.722 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv (einschl. Beispielprojekt!) Ein absolutes Muss - Mehr als 650 MByte geballtes Wissen! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - Online-Update-Funktion u.v.m. |
TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 25 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1524.50 EUR... Buchempfehlung Tipp des Monats Dieter Otter Snapshot einer Webseite erstellen Mit dieser Funktion lässt sich ein Snapshot einer Webseite erstellen, die aktuell im WebBrowser-Control angezeigt wird. TOP! Unser Nr. 1 ![]() sevDataGrid 2.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. |
|||||||||||||||||


Anzahl Datensätze korrekt ermitteln (DAO)



