strSQL = "(tblmain.ID1=[Forms]![Fmain]![F_Sub]![ID1]) AND (tblmain.ID2=[Forms]![Fmain]![F_Sub]![ID2] AND (tblmain.ID3=[Forms]![Fmain]![F_Sub]![ID3]))"
DoCmd.OpenForm "FEdit", , , strSQL
Your above
strSQL is
not concantenated properly and does not reference subforms controls properly. It should be
strSQL = "tblmain.ID1=" & [Forms]![Fmain]![F_Sub].form![ID1] & " AND tblmain.ID2=" & [Forms]![Fmain]![F_Sub].form![ID2] & " AND tblmain.ID3=" & [Forms]![Fmain]![F_Sub].form![ID3]
because ID1, ID2, and ID3 are variable controls and they change. They must be concantemated to your SQL string, not built into it. Furthermore, you are not referencing subform controls properly.
You already build (unbound) name1, name2 & name3 on FEdit on the Form_Open event. Similarily, when form FEdit is open and you change ID1, ID2, or ID3, use the respective ID1, ID2, or ID3 After_Update event to similarily update (unbound) name1, name2 name3, i.e.,
private sub ID1_AfterUpdate()
Me.name1 = Me.ID1.Column(1)
end sub
private sub ID2_AfterUpdate()
Me.name2 = Me.ID2.Column(1)
end sub
private sub ID3_AfterUpdate()
Me.name3 = Me.ID3.Column(1)
end sub
I still cannot execute your zipped file. I think that the problem might be associated with characters in your control names that do not translate to English and appear as little boxes. I have all versions of published Access and used A2000 with your unzipped file.
None the less, hopefully the above solves your problem.