Personally, I would use method #1
I assume the next line in your code after form.filter....
is form.filteron=true? I don't know why you would get a
primary key duplication, though.
For method #2
Here's how to fix the syntax...
Don't use the '' brackets to enclose the VBA constants. Also, use
quotes around your table name, not '' brackets. You also don't
need to use the '()' to enclose the arguments.
However, I don't think this will work for what you are trying to do here.
(I could be wrong, though)
Method #3 is possible, but probably requires more coding than it's worth
to get to the solution you need.
If you are trying to find a record in a your source table based on what the user chooses from a dropdown, the combo-box wizard should guide you through this. Add a combo box and when the Wizard asks "How do you want to get your values?" choose option "Find a record in my form based on the value I selected in my combo box."
Also, you could put your combo box in an outer form and put your data in a subform linked to it, but you would need to refresh your combo box if the underlying data changed.