Drew Wutka
DWUTKA at Marlow.com
Tue Mar 11 16:00:44 CDT 2008
No problem, here's one option, though the debug print may not work
right, since it might be longer then the list allows, I'll post a
modified solution in a minute.
Option Compare Database
Public Enum RecCountType
intTableOnly = 1
intQueryOnly = 2
intTableAndQuery = 3
End Enum
Private Function FieldDataTypeString(intType As ADODB.DataTypeEnum) As
String
Dim strTemp As String
Select Case intType
Case adInteger
strTemp = "Long"
Case adDouble
strTemp = "Double"
Case adCurrency
strTemp = "Currency"
Case adUnsignedTinyInt
strTemp = "Byte"
Case adVarWChar, adLongVarWChar
strTemp = "String"
Case adDate
strTemp = "Date"
Case adBoolean
strTemp = "Boolean"
End Select
If strTemp <> "" Then
FieldDataTypeString = strTemp
Else
FieldDataTypeString = "UNKNOWN"
End If
End Function
Function GetAllTableRecordCount(intCountType As RecCountType, Optional
ShowFields As Boolean = False)
Dim rsTables As ADODB.Recordset
Dim rs As ADODB.Recordset
Dim i As Long
Set rsTables = CurrentProject.Connection.OpenSchema(adSchemaTables)
If rsTables.EOF = False Then rsTables.MoveFirst
Do Until rsTables.EOF = True
If intCountType = intTableOnly Or intCountType = intTableAndQuery
Then
If rsTables.Fields("TABLE_TYPE") = "TABLE" Then
Set rs = New ADODB.Recordset
rs.Open "SELECT Count(*) FROM " &
rsTables.Fields("TABLE_NAME").Value, CurrentProject.Connection,
adOpenKeyset, adLockReadOnly
rs.MoveFirst
Debug.Print rsTables.Fields("TABLE_NAME") & " - Record
Count: " & rs.Fields(0).Value
rs.Close
Set rs = Nothing
If ShowFields Then
Set rs = New ADODB.Recordset
rs.Open "SELECT TOP 1 * FROM " &
rsTables.Fields("TABLE_NAME").Value, CurrentProject.Connection,
adOpenKeyset, adLockReadOnly
For i = 0 To rs.Fields.Count - 1
Debug.Print rsTables.Fields("TABLE_NAME").Value & "
Field: " & rs.Fields(i).Name & " Type: " &
FieldDataTypeString(rs.Fields(i).Type)
Next i
rs.Close
Set rs = Nothing
End If
End If
End If
If intCountType = intQueryOnly Or intCountType = intTableAndQuery
Then
If rsTables.Fields("TABLE_TYPE") = "VIEW" Then
Set rs = New ADODB.Recordset
rs.Open "SELECT Count(*) FROM " &
rsTables.Fields("TABLE_NAME").Value, CurrentProject.Connection,
adOpenKeyset, adLockReadOnly
rs.MoveFirst
Debug.Print rsTables.Fields("TABLE_NAME") & " - Record
Count: " & rs.Fields(0).Value
rs.Close
Set rs = Nothing
End If
If ShowFields Then
Set rs = New ADODB.Recordset
rs.Open "SELECT TOP 1 * FROM " &
rsTables.Fields("TABLE_NAME").Value, CurrentProject.Connection,
adOpenKeyset, adLockReadOnly
For i = 0 To rs.Fields.Count - 1
Debug.Print rsTables.Fields("TABLE_NAME").Value & "
Field: " & rs.Fields(i).Name & " Type: " &
FieldDataTypeString(rs.Fields(i).Type)
Next i
rs.Close
Set rs = Nothing
End If
End If
rsTables.MoveNext
Loop
rsTables.Close
Set rsTables = Nothing
End Function
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A Matte
Sent: Tuesday, March 11, 2008 2:27 PM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Record Count for all tables PART 2
Drew,
Worked like a charm!!!...But I guess I didn't ask enough
detail...because I was thought I would get the same Documentor
functionality like in A97...anyway...
Is there a similar way to get field names and types?
(Sorry for having to ask twice)
Thanks,
Mark A. Matte
The information contained in this transmission is intended only for the person or entity to which it is addressed and may contain II-VI Proprietary and/or II-VI Business Sensitive material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, copying, disclosure, dissemination, or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited.