if you need the record to be updateable you don't actually need tblContacts in your query since you have contactID in the history table. or at least change the contactID to the TblMemberHistory table. The subquery may also need to be aliased otherwise access will confuse which iteration of TblMemberHistory you are referring to
Also think you need more test data - the query will return records for all contacts who have an action on the same day.
My offering would be
Code:
SELECT *
FROM TblMemberHistory
WHERE (((TblMemberHistory.ContactID)=[Forms]![FrmContactDetails].[ContactID]) AND ((TblMemberHistory.ActionDate)=(SELECT Max(ActionDate) FROM tblMemberHistory T WHERE [ContactID] = Forms!FrmContactDetails.ContactID)))
or
Code:
SELECT *
FROM TblMemberHistory
INNER JOIN (SELECT ContactID, Max(ActionDate) AS MAD FROM tblMemberHistory WHERE [ContactID] = Forms!FrmContactDetails.ContactID GROUP BY ContactID) AS m
ON (TblMemberHistory.ActionDate = m.MAD) AND (TblMemberHistory.ContactID = m.ContactID)