Public Sub testAllTables()
LogAllEmptyTableColumns True, False
End Sub
Public Sub TestTable()
CurrentDb.Execute "delete * from tblEmptyColumns"
LogTableAndFields "T_Brand", False
End Sub
Public Sub LogAllEmptyTableColumns(Optional HandleSystemTables As Boolean = False, Optional HandleEmptyStrings As Boolean = True)
Dim tdf As DAO.TableDef
Dim strSql As String
Dim db As DAO.Database
Set db = CurrentDb
Dim start As Long
' On Error GoTo ErrLabel
strSql = "Delete * from tblEmptyColumns"
CurrentDb.Execute strSql
start = Timer
For Each tdf In db.TableDefs
If Not (HandleSystemTables = False And Left(tdf.Name, 4) = "MSYS") Then
LogTableAndFields tdf.Name, HandleEmptyStrings
End If
Next tdf
MsgBox "Elapsed Time " & Timer - start
Exit Sub
ErrLabel:
MsgBox Err.Number & " " & Err.Description
End Sub
Public Sub LogTableAndFields(TdfName As String, HandleEmptyStrings As Boolean)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field
Dim tdf As TableDef
Dim FieldName As String
Dim TableName As String
Dim recordcount As Long
Dim strSql As String
Dim StrEmpty As String
On Error GoTo ErrLabel
Set db = CurrentDb
Set tdf = db.TableDefs(TdfName)
If HandleEmptyStrings Then
StrEmpty = " & '' <> ''"
Else
StrEmpty = " Is NOT NULL"
End If
TableName = "[" & tdf.Name & "]"
For Each fld In tdf.Fields
FieldName = "[" & fld.Name & "]"
Select Case fld.Type
Case dbAttachment
FieldName = FieldName & ".[filename]"
Case dbComplexByte, dbComplexDecimal, dbComplexDouble, dbComplexGUID, dbComplexInteger, dbComplexLong, dbComplexSingle, dbComplexText
FieldName = FieldName & ".[value]"
End Select
strSql = "Select * FROM " & TableName & " WHERE " & FieldName & StrEmpty
' Debug.Print strSql
Set rs = CurrentDb.OpenRecordset(strSql)
If Not rs.EOF And Not rs.BOF Then
rs.MoveLast
recordcount = rs.recordcount
End If
' Debug.Print TableName & " " & FieldName & " " & rs.recordcount
If recordcount = 0 Then
'Handle different inserts
Select Case fld.Type
Case dbAttachment, dbComplexByte, dbComplexDecimal, dbComplexDouble, dbComplexGUID, dbComplexInteger, dbComplexLong, dbComplexSingle, dbComplexText
strSql = "Insert into tblEmptyColumns (TableName,FieldName,IsMultiValueField) values ('" & TableName & "', '" & FieldName & "', True)"
Case Else
strSql = "Insert into tblEmptyColumns (TableName,FieldName,IsMultiValueField) values ('" & TableName & "', '" & FieldName & "', False)"
End Select
CurrentDb.Execute strSql
End If
recordcount = 0
Next fld
Exit Sub
ErrLabel:
MsgBox Err.Number & " " & Err.Description
End Sub