Como usar os parâmetros de consulta do ADO para especificar nomes de tabela e campo?

Estou executando umUPDATE declaração em umTADOQuery e estou usando parâmetros para algumas coisas. Inicialmente, isso funcionava muito bem, mas adicionei outro parâmetro para o nome da tabela e o nome do campo, e agora está quebrando.

O código é assim:

Q.SQL.Text:= 'update :tablename set :fieldname = :newid where :fieldname = :oldid';
Q.Parameters.ParamValues['tablename']:= TableName;
Q.Parameters.ParamValues['fieldname']:= FieldName;
Q.Parameters.ParamValues['oldid']:= OldID;
Q.Parameters.ParamValues['newid']:= NewID;

E o erro que recebo:

Estou assumindo que isso é porque estou usando esse nome de campo duas vezes. Eu posso superar isso usando outro nome de campo exclusivo pela segunda vez que ele é usado, mas ainda tenho outro erro:

Como eu uso os parâmetros para especificar a tabela e o campo para atualizar?

questionAnswers(1)

yourAnswerToTheQuestion