& “; Description: “ & Err.Description
Resume ErrorHandlerExit
End IfEnd SubThe UpdateAllAccessContactsprocedure has the more complex task of copying updated con-
tact data from tblAccessContacts back to the linked contact tables. This procedure does the reverse of
the CreateDenormalizedContactsTableprocedure; using tblAccessContacts as a data source,
it updates the linked contact data in tblCompanyInfo, tblContactInfo, tblCompanyIDsPhones,
tblContactAddresses, and tblContactIDsAndPhones, creating new records as needed:Public Sub UpdateAllAccessContacts()
‘Called from cmdUpdateContactInfo_Click() on fmnuMainOn Error GoTo ErrorHandlerDim lngContactID As Long
Dim lngCompanyID As Long
Dim strSourceTable As String
Dim strTarget As String
Dim strAddressType As String
Dim strDescription As StringSet dbs = CurrentDb
strSourceTable = “tblAccessContacts”Set rstSource = dbs.OpenRecordset(strSourceTable, _
dbOpenDynaset)UpdateCompanyInfo:
Do While Not rstSource.EOF
Debug.Print “Processing Target ID: “ _
& rstSource![TargetID]Search for matching Company record in target table, and update it if found; otherwise, create new
company record, and write company data to it.strTarget = “tblCompanyInfo”
Set rstTarget = dbs.OpenRecordset(strTarget, _
dbOpenDynaset)
blnDelete = rstSource![Delete]
If blnDelete = True ThenTo avoid problems with deleting records in a table on the “one” side of a one-to-many relationship,
before updating the tables, the procedure runs three delete queries to delete records linked to con-
tacts marked for deletion:Part II Writing VBA Code to Exchange Data between Office Components