Lo que no entiendo es si tienes definida la consulta con el parámetro :codigo, porque vuelves a crearla.
Prueba así, quizás te solucione el problema:
Código Delphi
[-]
MyQuery.Close;
MyQuery.ParamByName('codigo').DataType := ftInteger;
MyQuery.ParamByName('codigo').AsInteger := StrToInt(txtcodigo.text);
MyQuery.Open;
No conozco los componentes MyDac, pero supongo que MyQuery.Execute sobra, ya que se suele utilizar para consultas que no devuelven ningún resultado (tipo INSERT, DELETE...).