No le veo solucion aparte de las que ya te he comentado: pasarle un query tambien como parametro,
Código Delphi
[-]
procedure TRDM_Consulta.CriaComponente(qtdCampoChave: Integer;nmTabela, SQL: string; qry : TSQLquery);
var
dsp: TDataSetProvider;
begin
dsp := TDataSetProvider.Create(Self);
...
dsp.DataSet := qry;
dsp.Exported := True;
dsp.UpdateMode := upWhereKeyOnly;
dsp.Options := dsp.Options + [poAllowCommandText];
...
o bien que te devuelva un query
Código Delphi
[-]
function TRDM_Consulta.CriaComponente(qtdCampoChave: Integer;nmTabela, SQL: string) : TSQLquery;
var
qry: TSQLQuery;
dsp: TDataSetProvider;
begin
qry := TSQLQuery.Create(Self);
dsp := TDataSetProvider.Create(Self);
qry.Name := 'qry' + nmTabela;
dsp.Name := 'dsp' + nmTabela
...
dsp.OnDataRequest := dspDataRequestParam;
CriaComponente := qry;
end;
ten en cuenta que en tu funcion no liberas qry ni dsp, por lo que la estas creando incontables veces.