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 25.417 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Neu! sevPopUp 2.0 ![]() Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
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. |