Criar Field no CDS
Caros amigos , estou com o seguinte problema.
Preciso atribuir uma relação mestre-detalhe em um form de consulta padrao que deve mudar o SQL de acordo com a tela de chamada , ou seja , se chamada por uma tela de Clientes , monta um SQL do tipo (Select COD_CLI , NOM_CLI FROM CLIENTES .... etc ) , se chamada de uma tela de Plano de Contas monta o SQL do tipo ( SELECT COD_CONTA,NOM_CONTA,GRUPO from PLANO_CONTAS where GRUPO=:GRUPO).
Blza , neste form tenho dois conjuntos IBQry+DSP+CDS+DS , um para a consulta genérica ( que recebe os SQL´s acima e que funciona blza ) e o outro para o Mestre ( no caso de consulta mestre-detalhe ).
Quando a chamada vem de uma tela que precisa de escolha através de mestre detalhe , preencho o SQL do trio Mestre e depois o SQL do Trio Consulta , ativo a grade que mostra os Mestres e tudo funciona.
Quando tendo atribuir os valores , MasterSource, MasterFields e IndexFieldNames recebo a mensagem que o Field não existe , então criei a seguinte rotina :
(CDSPadrao é o da Consulta genérica )
for i := 0 to CDSPadrao.FieldDefs.Count - 1 do begin
Campo := CDSPadrao.FieldDefs[I].CreateField(CDSPadrao);
Campo.Name := CDSPadrao.Name + CDSPadrao.FieldDefs[i].Name;
Campo.DisplayLabel := CDSPadrao.FieldDefs[i].Name; end;
(CDSPadrao é o que vai ser o mestre)
for i := 0 to CDSFiltroEspecial.FieldDefs.Count - 1 do begin
Campo := CDSFiltroEspecial.FieldDefs[I].CreateField(CDSFiltroEspecial);
Campo.Name := CDSFiltroEspecial.Name + CDSFiltroEspecial.FieldDefs[i].Name;
Campo.DisplayLabel := CDSFiltroEspecial.FieldDefs[i].Name; end;
Bom , a princípio isto deveria resolver o prblema da falta do Field ,
Tudo parece normal , mas continuo recebendo a mensagem , e , quando procuro pelo Field com if Findfield(´GRUPO´) <> nil then ShowMessage(´Achou o Grupo´) , simplesmente não esta lá.
Como realmente adicionar os Fields ao CDS e poder referencia-los para uma relação mestre-detalhe.
Agradeço antecipadamente.
Preciso atribuir uma relação mestre-detalhe em um form de consulta padrao que deve mudar o SQL de acordo com a tela de chamada , ou seja , se chamada por uma tela de Clientes , monta um SQL do tipo (Select COD_CLI , NOM_CLI FROM CLIENTES .... etc ) , se chamada de uma tela de Plano de Contas monta o SQL do tipo ( SELECT COD_CONTA,NOM_CONTA,GRUPO from PLANO_CONTAS where GRUPO=:GRUPO).
Blza , neste form tenho dois conjuntos IBQry+DSP+CDS+DS , um para a consulta genérica ( que recebe os SQL´s acima e que funciona blza ) e o outro para o Mestre ( no caso de consulta mestre-detalhe ).
Quando a chamada vem de uma tela que precisa de escolha através de mestre detalhe , preencho o SQL do trio Mestre e depois o SQL do Trio Consulta , ativo a grade que mostra os Mestres e tudo funciona.
Quando tendo atribuir os valores , MasterSource, MasterFields e IndexFieldNames recebo a mensagem que o Field não existe , então criei a seguinte rotina :
(CDSPadrao é o da Consulta genérica )
for i := 0 to CDSPadrao.FieldDefs.Count - 1 do begin
Campo := CDSPadrao.FieldDefs[I].CreateField(CDSPadrao);
Campo.Name := CDSPadrao.Name + CDSPadrao.FieldDefs[i].Name;
Campo.DisplayLabel := CDSPadrao.FieldDefs[i].Name; end;
(CDSPadrao é o que vai ser o mestre)
for i := 0 to CDSFiltroEspecial.FieldDefs.Count - 1 do begin
Campo := CDSFiltroEspecial.FieldDefs[I].CreateField(CDSFiltroEspecial);
Campo.Name := CDSFiltroEspecial.Name + CDSFiltroEspecial.FieldDefs[i].Name;
Campo.DisplayLabel := CDSFiltroEspecial.FieldDefs[i].Name; end;
Bom , a princípio isto deveria resolver o prblema da falta do Field ,
Tudo parece normal , mas continuo recebendo a mensagem , e , quando procuro pelo Field com if Findfield(´GRUPO´) <> nil then ShowMessage(´Achou o Grupo´) , simplesmente não esta lá.
Como realmente adicionar os Fields ao CDS e poder referencia-los para uma relação mestre-detalhe.
Agradeço antecipadamente.
Emerson Azevedo
Curtidas 0