[AccessD] Update Name Mapping for Name Autocorrect

Dan Waters dwaters at usinternet.com
Sun May 14 12:08:33 CDT 2006


Hello to everyone,

I like the concept of the Name Autocorrect option in Access, but everyone
seems to say to stay away from it.  I did a search in the Archive and
learned about Name Mapping in Access.  In the Archives you'll find an entry
with 'TsiNameFixup90' in the subject line from Sad Der dated 7/20/06.  This
last half of this entry explains what name mapping is.

So, to get name mapping up to date, I wrote the following procedure.  It
opens most objects in design view and then saves them.  Now I can use Name
Autocorrect as it was intended.  Time will tell if it helps or hurts!

If you want to give it a try, copy the following code into a standard module
and run it.

Good Luck!
Dan

----------------------------------------------------------------------------


Option Compare Database
Option Explicit

Private Sub ResetObjectNameMaps()
On Error GoTo EH

    '-- This procedure will open almost all of the tables, queries, forms,
and reports in design view, and then close them _
        with acSaveYes.  This will prepare these objects to be able to
correctly take advantage _
        of the Name Autocorrect option.  There is a behind the scenes
functionality called 'Name Mapping' that is managed by Access _
        when Name Autocorrect is turned on.  If it has been off, then each
table, query, report, and form must be _
        opened and saved in design view to completely update Name Mapping.

    '-- 1) Turn on Perform Name AutoCorrect in Access options. _
        2) Second, run this procedure. _
        3) Then leave Perform Name Autocorrect on.
        
    Dim tbl As TableDef
    Dim qry As QueryDef
    Dim frm As Object
    Dim rpt As Object
    Dim stgName As String
    Dim intObjectCount As Integer
    
    Application.Echo False
    
    '-- Tables
    For Each tbl In CurrentDb.TableDefs
        '-- Skip linked tables or Access System tables
        If Not (tbl.Attributes = dbAttachedTable Or tbl.Attributes =
dbAttachedODBC Or Left(tbl.Name, 4) = "Msys") Then
            intObjectCount = intObjectCount + 1
            stgName = tbl.Name
            DoCmd.OpenTable stgName, acViewDesign, acEdit
            DoCmd.Close acTable, stgName, acSaveYes
        End If
    Next
    MsgBox intObjectCount & " Tables!"
    intObjectCount = 0

    '-- Queries
    '-- Note:  If a query has Owner permission and you are not the Owner,
this will error out.
    For Each qry In CurrentDb.QueryDefs
        If Not (Left(qry.Name, 4)) = "~sq_" Then
            intObjectCount = intObjectCount + 1
            stgName = qry.Name
            DoCmd.OpenQuery stgName, acViewDesign, acEdit
            DoCmd.Close acQuery, stgName, acSaveYes
        End If
    Next
    MsgBox intObjectCount & " Queries!"
    intObjectCount = 0
    
    '-- Forms
    For Each frm In Application.CurrentProject.AllForms
        intObjectCount = intObjectCount + 1
        stgName = frm.Name
        DoCmd.OpenForm stgName, acDesign
        DoCmd.Close acForm, stgName, acSaveYes
    Next
    MsgBox intObjectCount & " Forms!"
    intObjectCount = 0
    
    '-- Reports
    For Each rpt In Application.CurrentProject.AllReports
        intObjectCount = intObjectCount + 1
        stgName = rpt.Name
        DoCmd.OpenReport stgName, acDesign
        DoCmd.Close acReport, stgName, acSaveYes
    Next
    MsgBox intObjectCount & " Reports!"
    
    Application.Echo True
    
    Exit Sub
    
EH:
    Application.Echo True
    MsgBox Err.Number & ":  " & Err.Description & vbCrLf & vbCrLf & "Object
Name: " & stgName
    
End Sub






More information about the AccessD mailing list