Minty -- not really tracking here... sorry. Please see entire VBA code (3 functions) where I'm currently trying to correct the UpdateQueries code.
Code:
Option Compare Database
Option Explicit
Public iCounter As Integer
Public Sub UpdateQueries()
'Declare variables
Dim rs As DAO.Recordset, sTarget As String, sField As String
Dim sCurrent As String, i As Integer
Dim sSQL As String, sFieldAlias As String
Dim strBaseSQL As String
Dim v, sOrganizationFilter As String
'Filter for data source (MMAC, NNSY, etc.)
Dim t As TableDef
For Each t In CurrentDb.TableDefs
If t.Name = "00_tbl_MMAC" Then strBaseSQL = "SELECT |FIELDS_HERE| FROM [00_tbl_MMAC];"
If t.Name = "00_tbl_NNSY" Then strBaseSQL = "SELECT |FIELDS_HERE| FROM [00_tbl_NNSY];"
If t.Name = "00_tbl_PHNSY" Then strBaseSQL = "SELECT |FIELDS_HERE| FROM [00_tbl_PHNSY];"
If t.Name = "00_tbl_POAIRS" Then strBaseSQL = "SELECT |FIELDS_HERE| FROM [00_tbl_POAIRS];"
Next
'Reset counter for new tables
iCounter = 0
'Delete all queries
If Forms![F01_MainMenu].chkDeleteAllQry = True Then Call DeleteAllQueries
Set rs = CurrentDb.OpenRecordset("SELECT * FROM 01_tbl_FieldMapping Order BY TABLE_NAME, FN_STANDARDIZED;", dbOpenSnapshot)
If rs.RecordCount = 0 Then Exit Sub
sTarget = ""
sField = ""
sSQL = ""
sTarget = rs("TABLE_NAME") 'First record
Do Until rs.EOF
sField = rs("[FN_LEGACY]")
sCurrent = rs("TABLE_NAME")
sFieldAlias = Nz(rs("FN_STANDARDIZED"), sField) 'Allows to only add alias where different than original field name (i.e., FN_LEGACY)
If sTarget <> sCurrent And i > 1 Then
sSQL = Left(sSQL, Len(sSQL) - 1)
sSQL = Replace(strBaseSQL, "|FIELDS_HERE|", sSQL)
Call CreateQuery("qry" & sTarget, sSQL)
sTarget = sCurrent 'Reset target
sSQL = ""
End If
If sFieldAlias = sField Then
sSQL = sSQL & "[" & sField & "],"
Else
sSQL = sSQL & "[" & sField & "] as " & sFieldAlias & ","
End If
i = i + 1
rs.MoveNext
If rs.EOF Then Call CreateQuery("qry" & sTarget, Replace(strBaseSQL, "|FIELDS_HERE|", Left(sSQL, Len(sSQL) - 1))) 'Last one
Loop
End Sub
Public Sub CreateQuery(sQueryName As String, sQuerySQL As String)
Dim qdf As DAO.QueryDef, qdfMk As DAO.QueryDef
On Error Resume Next
DoCmd.DeleteObject acQuery, sQueryName
DoCmd.DeleteObject acTable, Replace(sQueryName, "qry", "tbl")
Set qdf = CurrentDb.CreateQueryDef(sQueryName, sQuerySQL)
If Forms![F01_MainMenu].chkCreateMK = True Then 'Copy SELECT queries and makes them MAKE TABLE queries
Set qdfMk = CurrentDb.CreateQueryDef("mk_" & sQueryName, "SELECT [" & sQueryName & "].* INTO " & Replace(sQueryName, "qry", "tbl") & " FROM [" & sQueryName & "];")
End If
If Forms![F01_MainMenu].chkExecuteMK = True Then 'Execute MAKE TABLE queries
CurrentDb.Execute "mk_" & sQueryName, dbFailOnError
End If
CurrentDb.QueryDefs.Refresh
Application.RefreshDatabaseWindow
iCounter = iCounter + 1 'Increment public new tables counter
End Sub
Public Sub DeleteAllQueries()
'Declare variables
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim n As Integer
'For loop for deleting queries
Set db = CurrentDb
For Each qdf In db.QueryDefs
If Left(qdf.Name, 6) <> "01_qry" Then
DoCmd.DeleteObject acQuery, qdf.Name
n = n + 1
End If
Next
If n = 0 Then
'Do nothing
Else
MsgBox n & " queries have been deleted.", vbInformation, "Delete Queries"
End If
End Sub