Hello all,
Not sure exactly what is wrong with my code, it keeps coming back with error 13 (type mismatch). This is a simplified version of my code with the line causing the error highlighted:
Sub Loop_Criteria_UnionQUERY()
'define names for the database, query table and the SQL string
Dim db As Database
Dim qdf As QueryDef
Dim def As TableDef
Dim strName As String
Dim strSQLcriteriaquery As String
Dim strUnionQuery As String
'look into the current database
Set db = CurrentDb
'Loop through all tables in the file.
For Each def In db.TableDefs
'This if statement ensures the inbuilt tables are not affected.
If Left(def.Name, 4) <> "MSys" Then
strName = def.Name & "Query2"
If CurrentDb.TableDefs(def.Name).Fields.Count = 8 Then
strSQLcriteriaquery = "SELECT [" & def.Name & "].[a], [" & def.Name & "].[b, [" & def.Name & "].[c], [" & def.Name & "].[d], 'null' as [e], 'null' as [f], 'null' as [g], [" & def.Name & "].[h], [" & def.Name & "]. FROM [" & def.Name & "] WHERE ((([" & def.Name & "].b)='test1' Or ([" & def.Name & "].b)='test2' Or ([" & def.Name & "].b)='test3' Or ([" & def.Name & "].b)='test4' Or ([" & def.Name & "].b)='test5'));"
Else
strSQLcriteriaquery = "SELECT [" & def.Name & "].[a], [" & def.Name & "]., [" & def.Name & "].[c], [" & def.Name & "].[d], [" & def.Name & "].[e], [" & def.Name & "].[f], [" & def.Name & "].[g], [" & def.Name & "].[h], [" & def.Name & "]. FROM [" & def.Name & "] WHERE ((([" & def.Name & "].b)='test1' Or ([" & def.Name & "].b)='test2' Or ([" & def.Name & "].b)='test3' Or ([" & def.Name & "].b)='test4' Or ([" & def.Name & "].b)='test5')) OR ((([" & def.Name & "].[f]) Like " * test6 * ") AND (([" & def.Name & "].[g])='test7'));"
End If
strUnionQuery = strUnionQuery & Left(strSQLcriteriaquery, (Len(strSQLcriteriaquery) - 1)) & " UNION ALL "
'Create a new query: CreateQueryDef("name to assign to the query table", SQLstringname)
Set qdf = db.CreateQueryDef(strName, strSQLcriteriaquery)
'Open the new query
DoCmd.OpenQuery strName
End If
Next def
strUnionQuery = Left(strUnionQuery, (Len(strUnionQuery) - 10)) & ";"
Set qdf = db.CreateQueryDef("UnionQuery", strUnionQuery)
DoCmd.OpenQuery "UnionQuery"
End Sub
Any help/insight would be appreciated.
Many thanks,
D
Not sure exactly what is wrong with my code, it keeps coming back with error 13 (type mismatch). This is a simplified version of my code with the line causing the error highlighted:
Sub Loop_Criteria_UnionQUERY()
'define names for the database, query table and the SQL string
Dim db As Database
Dim qdf As QueryDef
Dim def As TableDef
Dim strName As String
Dim strSQLcriteriaquery As String
Dim strUnionQuery As String
'look into the current database
Set db = CurrentDb
'Loop through all tables in the file.
For Each def In db.TableDefs
'This if statement ensures the inbuilt tables are not affected.
If Left(def.Name, 4) <> "MSys" Then
strName = def.Name & "Query2"
If CurrentDb.TableDefs(def.Name).Fields.Count = 8 Then
strSQLcriteriaquery = "SELECT [" & def.Name & "].[a], [" & def.Name & "].[b, [" & def.Name & "].[c], [" & def.Name & "].[d], 'null' as [e], 'null' as [f], 'null' as [g], [" & def.Name & "].[h], [" & def.Name & "]. FROM [" & def.Name & "] WHERE ((([" & def.Name & "].b)='test1' Or ([" & def.Name & "].b)='test2' Or ([" & def.Name & "].b)='test3' Or ([" & def.Name & "].b)='test4' Or ([" & def.Name & "].b)='test5'));"
Else
strSQLcriteriaquery = "SELECT [" & def.Name & "].[a], [" & def.Name & "]., [" & def.Name & "].[c], [" & def.Name & "].[d], [" & def.Name & "].[e], [" & def.Name & "].[f], [" & def.Name & "].[g], [" & def.Name & "].[h], [" & def.Name & "]. FROM [" & def.Name & "] WHERE ((([" & def.Name & "].b)='test1' Or ([" & def.Name & "].b)='test2' Or ([" & def.Name & "].b)='test3' Or ([" & def.Name & "].b)='test4' Or ([" & def.Name & "].b)='test5')) OR ((([" & def.Name & "].[f]) Like " * test6 * ") AND (([" & def.Name & "].[g])='test7'));"
End If
strUnionQuery = strUnionQuery & Left(strSQLcriteriaquery, (Len(strSQLcriteriaquery) - 1)) & " UNION ALL "
'Create a new query: CreateQueryDef("name to assign to the query table", SQLstringname)
Set qdf = db.CreateQueryDef(strName, strSQLcriteriaquery)
'Open the new query
DoCmd.OpenQuery strName
End If
Next def
strUnionQuery = Left(strUnionQuery, (Len(strUnionQuery) - 10)) & ";"
Set qdf = db.CreateQueryDef("UnionQuery", strUnionQuery)
DoCmd.OpenQuery "UnionQuery"
End Sub
Any help/insight would be appreciated.
Many thanks,
D