A, B and C are variables that identify FieldNames. A and C contain the names of FieldNames in the external database. B contains a FieldName in the active database.
The KeyField, and DataField parameters are the names of the fields, not their values, so you don’t want to use the FieldValue( function for those parameters, because that would return the value in whichever record was active in the external database rather than the name of the field.
The DataValue parameter, on the other hand, is a value, and you will need to use the FieldValue( function, if the B variable is to tell it which field to draw that value from.
I haven’t tried Dave’s solution either, but FWIW it also looks correct to me.
However, since you have access to Denali, I would suggest using the join statement instead, it will be much faster. Like Dave, I haven’t tested this, but I think this is what you want. You will have to change CURRENTFIELD to the name of the field you want the data put into.