Não entendi, a idéia não é essa mesma, para cada registro do pai carregar os
filhos automaticamente.

Exemplifica o que vc constatou. O que ele tava executando
desnecessariamente.

Em 22 de julho de 2010 22:09, Eny Urias <[email protected]> escreveu:

>
>
> Só para deixar registrado:
>
> Eu usei por muito tempo esse esquema do DATASETFIELD para utilizar em
> Master/Detail... Até que um dia, utilizando a ferramenta OraTracer para
> pegar um
> comando sql do Oracle eu pude perceber que ao utilizar essa técnica, quando
> o
> CDS carrega os registros do Master, ele tras também, para cada registro
> pai,
> todos os registros do filho... Fiquei abismada com o tráfego que isso causa
> na
> rede... Quando o DBA da empresa viu disse para nunca mais utilizar dessa
> forma...
>
> Agora eu abro o CDS filho utilizando o mesmo parametro mas no evento
> AfterScroll
> do CDS pai...
>
> Alguém já fez essa verificação com outros bancos?
>
>
> --
> Eny Trova Urias
>
> "Somos o que repetitivamente fazemos, portanto, a excelência não é um
> feito, mas
> um hábito"- Aristóteles
>
> ________________________________
> De: Walter Chagas (Bol) <[email protected] <wchagasj%40bol.com.br>>
>
> Para: [email protected] <delphi-br%40yahoogrupos.com.br>
> Enviadas: Quinta-feira, 22 de Julho de 2010 14:58:28
> Assunto: Re: [delphi-br] [CLIENTDATASET 3 TABELAS]
>
>
> Marcio,
>
> Este passo-a-passo meu já é bem conhecido aqui na lista. Ve se te atende:
>
> 1) TODAS AS TABELAS ENVOLVIDAS NESTE PROCESSO TEM QUE TER CHAVE PRIMÁRIA E
> ESTRANGEIRA, DO CONTRARIO ISTO DAÍ NÃO VAI FUNCIONAR 100% ESTÁVEL.
>
> 2) Coloque um componente TADOConnection no seu DataModule e defina as
> configurações devidas nele.
>
> 3) Coloque um compoente TQuery no Datamodule ou então um TSQLDataSet. Vamos
>
> Chamá-lo de qMaster, ou sqldMaster.
>
> 4) Coloque na propriedade SQL do qMaster, ou então na propriedade
> CommandText do sqldMaster a sentença SQL que você deseja buscar como dados
> da Tabela Master.
>
> 5) Dê um clique duplo na qMaster. Aparecerá o FieldsEditor. Manda adicionar
>
> todo mundo.
>
> 6) Em cada TField, localize a propriedade providerflags. Os campos que são
> chave primária na Tabela, ficaraão com pfInkey true nos, os demais ficou
> false. Os pfInUpdate e pfInWhere todos ficam como true (em todos os
> campos).
>
> 7) Sete a propriedade CursorLocation da qMaster ou do sqldMaster pra
> "clUseServer"
>
> 8) Se a sentença SQL da qMaster tiver parametros, ajuste as configurações
> dele, na propriedade "Parameters" (A não configuração do parametro irá dar
> pau nos ClientDatasets posteriormente)
>
> 9) Coloque um componente TDatasetProvider no Datamodule. vamos chamá-lo de
> dspMaster.
>
> 10) Aponte o Dataset dele pra qMaster ou pro sqldMaster.
>
> 11) Abra a propriedade Options do dspMaster. Todas as subpropriedades dele
> devem ficar como false, exceto as poCascadeDeletes, poCascadeUpdates,
> poAutoRefresh. Estas tres deverão ficar setadas como True.
>
> 12) Mude a propriedade, no dspMaster, UpdateMode para "upWhereKeyOnly"
>
> 13) Coloque no seu Datamodule um componente TClientDataset. Vamos chamalo
> de
> cdsMaster.
>
> 14) Aponte o Provider dele pra dspMaster.
>
> 15) Ative o cdsMaster, mudando a propreiedade Active dele para True. Dê um
> clique duplo na cdsMaster. Aparecerá o FieldsEditor. Manda adicionar todo
> mundo.
>
> 16) Repita o passo 6. Mas agora, você pode formatar os campos. Na
> propriedade DisplayLabel, coloque um nome mais legível ao usuário. Na
> propriedade Displayformat, você pode formatar valores monetários e de data
> para serem exibidos. Na propriedade EditFormat voce pode formatar estes
> valores para serem editados no cadastro. A propriedade Visible do TField,
> permite você ocultar este campo nos DBwares.
>
> 17) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de
>
> dsMaster.
>
> 18) Aponte o Dataset dele para o cdsMaster.
> Seu Módulo Master está pronto.
> Agora vamos linkar ele ao Modulo detail.
>
> 1) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de
> dsMasterDetail.
>
> 2) Aponte o Dataset dele para o dsMaster.
>
> 3)Coloque um compoente TQuery no Datamodule ou então um TSQLDataSet. Vamos
> Chamá-lo de qDetail, ou sqldDetail.
>
> 4) Coloque na propriedade SQL do qMaster, ou então na propriedade
> CommandText do sqldMaster a sentença SQL que você deseja buscar como dados
> da Tabela Detail, com o detalhe de que o parametro de referência na tabela
> detail, deve ter OBRIGATÓRIAMENTE o nome exato do campo chave na tabela
> master. Veja o exemplo:
> Na tabela master queremos buscar todas as MM (movimentação de material) de
> um determinado amoxarifado:
>
> select IDMOV, CODTMV, SERIE, NUMEROMOV, DATAEMISSAO, DATAENTREGA,
> COMPETENCIA, CODFILIAL, CODPESSOA, CODLOCALIDADE,
> CODOSATIV, CODCONTRATO, CODLOC, CODFILIALDEST, CODLOCDEST, STATUS,
> OBSERVACAO, USRCRIACAO, DATACRIACAO, USRALTERACAO,
> DATAALTERACAO, DATAEXPORTACAO, NOMEARQEXPORT, CODCCUSTO, CODDEPTO, CODAREA
> from ZMMTMOV
> Na tabela detail, queremos buscar todos os itens da MM (movimentação de
> material) de um determinado registro master:
> select IDMOV, NSEQITMMOV, IDPRD, QUANTIDADE, CODUND, LOTE, ROLO, PATRIMONIO
>
> from ZMMTITMMOV where IDMOV = :IDMOV
> ATENTE PARA O PARÂMETRO IDMOV. ELE É O MESMO NOME DO CAMPO MASTER IDMOV.
>
> 5) repita os passos 5 e 6 da geração da query master (referentes ao
> Tfieds).
>
> 6) Sete a propriedade CursorLocation da qDetail ou do sqldDetail pra
> "clUseClient"
>
> 8) Repita o passo 8 da geração da query master (referentes ao parametro).
>
> 9) Aponte o Datasource de qDetail para o dsMasterDetail.
>
> 11) Repita o passo 15 do cdsMaster, só que agora, ao você mandar adicionar
> os TFields, irá aparecer um novo campo. Este campo é um DATASETFIELD é o
> elo
> de comunicação entre o seu master e o detail e deverá ter o nome qDetail.
>
> 12) No cdsDetail, aponte o seu Datasetfield para qDetail.
>
> 15) Repita o passo 16 do cdsMaster para o cdsDetail. Mesma coisa.
> Está pronta a sua tão sonhada conexão MD.
> Você pode criar ainda Details que sejam detail deste ultimo Detail que
> criamos agora. Para fazer isto, basta fazer o seguinte:
>
> 1) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de
> dsDetailDetail.
>
> 2) Aponte o Dataset dele para o dsDetail.
> O resto dos procedimentos, você pode seguir os passos da criação do CDS e
> do
> Datasource. A unica diferença é que pra este novo caso (Detail de um Detail
>
> mestre), não é necessário um novo DatasourceProvider.
> E assim você pode fazer relacionamento MD em cascata ou em arvore mesmo. Só
>
> tome o cuidado pra não fazer bagunça e depois a coisa ficar inviável pra
> dar
> manutenção.
>
> Para fazer uma inclusão ou uma edição em um relacionamento MD: você deve
> dar
> insert/Edit em todos os Datasets. Para dar o post, dê post apenas nos
> details, NO MASTER PRINCIPAL SOMENTE DAR O APPLYUPDATES DIRETO. Não dê
> applyUpdates em algum detail.
>
> Para fazer uma exclusão em um relacionamento MD: você deve dar delete em
> todos os Datasets, SOMENTE NO MASTER DAR O APPLYUPDATES DEPOIS DO DELETE.
> Não dê applyUpdates em NENHUM detail.
>
> 1) Sugestão de código para você dar um ApplyUpdates no Dataset:
>
> Deve ser colocado nos eventos: onAfterPost e onAfterDelete do
> ClientDataSet:
> if (DataSet as TClientDataSet).ApplyUpdates(0) <> 0 then
> raise EDataBaseError.Create(Exception(exceptobject).Message)
> else
> (DataSet as TClientDataSet).Refresh;
>
> 2) Sugestão para abertura do ClientDataset ordenado:
> Deve ser colocado no evento onBeforeOpen do ClientDataSet:
> (DataSet as TClientDataSet).indexname := 'DEFAULT_ORDER';
>
> 3) Ativar o ReconcileError em todos os ClientDatasets do DataModule:
> Declare na cláusula Private do DM:
> procedure CdsReconcileError(
> (*$IFDEF VER150*)
> DataSet: TCustomClientDataSet;
> (*$ELSE*)
> DataSet: TClientDataSet;
> (*$ENDIF*)
> E: EReconcileError; UpdateKind:
> TUpdateKind;
> var Action: TReconcileAction);
> Em seguida, no Evento onCreate do DM, coloque o seguinte código:
> for i := 0 to ComponentCount-1 do
> begin
> if Components[i] is TClientDataSet then
> TClientDataSet(Components[i]).OnReconcileError := CdsReconcileError;
> end;
>
> 4) Gerar o formulário de cadastro já pronto pra ser utilizado.
>
> 1)Crie um novo form.
>
> 2)Coloque um DBNavigator nele ou um outro componente de navegação na
> tabela.
>
> 3)Dê um clique duplo no CDS referente aquele cadastro e deixe aberto o
> Fields Editor
>
> 4)Minimize outras telas de forma a deixar o Fields Editor emparelhado com o
>
> form. Marque todos os TFields
>
> 5) Arraste todos eles ou um a um para o form. Já será criado o Label com o
> DBEdit e o Datasource refernte aquele Dataset.
>
> []s
>
> Walter Alves Chagas Junior
> Belo Horizonte - MG - Brazil
> [email protected] <wchagasj%40bol.com.br>
> http://delphitocorporerm.blogspot.com/
> http://twitter.com/wchagas
> MSN: [email protected] <whitesockets%40hotmail.com>
> SKYPE: WalterChagasJr
>
> ----- Original Message -----
> From: Marcio
> To: [email protected] <delphi-br%40yahoogrupos.com.br>
> Sent: Wednesday, July 21, 2010 4:59 PM
> Subject: [delphi-br] [CLIENTDATASET 3 TABELAS]
>
> Olá para os entendidos ...
>
> como é que se faz para usar ClientDataset com 3 tabelas no caso .
>
> ex: (Respresentantes 1-N Clientes )
>
> TAB_Representante x TAB_rep_cli x TAB_Cliente
>
> supondo que eu esteja cadastrando o cliente, como faco para fazer a ligacao
> com o representante ??
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [email protected]
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [email protected]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a