Ante todo muchas gracias por tu ayuda, pero....Esta consulta funciona, porque le pongo directamente el valor a mano.
consulta->Active=False;
consulta->SQL->Clear();
consulta->SQL->Add("SELECT *");
consulta->SQL->Add("FROM tabla");
consulta->SQL->Add("WHERE nombre='José Luis'");
consulta->Active=True;
pero, ¿cómo le paso un valor cada vez distinto?.
sprintf (valor, "%s", tabla2->FieldByName("NOMBRE")->AsString);
He probado en pasarle en vez de José Luis, valor, pero nada