[firebase-br] Off-Topic - Master/detail no TClientDataSet

Francisco Thiago jeandeadlucky em yahoo.com.br
Ter Jun 20 11:56:26 -03 2006


Só mais uma coisa:

A não ser que você atribua a chave no lado do cliente, o cds não irá fazer 
as ligações corretamente (no caso do mestre ser auto-incremento ou algo 
assim).

Eu escrevi o seguinte código para solucionar isso:


No BeforeUpdateRecord do DataSetProvider...

const
  {$J+} //Ativa constantes modificáveis
  qg    :Integer = 1;
  {$J-}//Desativa
begin
  inherited;
  if UpdateKind = ukInsert then //estamos inserindo?
  begin
    if SourceDS = sqlCad_Crediario then //Trabalhando com o mestre
    begin
      UpdateRecordAutoInc(DeltaDS,UpdateKind,DeltaDS.FieldByName('CCRED_CODIGO').Index); 
//Procedure encarregado do auto incremento
      //guardo o valor do auto-incremento na constante. Na próxima vez que o 
provider chamar esta funcao, a constante vai ter o valor
      // do campo. Prefiro isso a uma variavel global :S
      qg := DeltaDS.FieldByName('CCRED_CODIGO').NewValue;
    end
    else if SourceDS = sqlCad_Cred_Item then //Trabalhando com o detalhe
    begin
      if (DeltaDS.FieldByName('CCRED_CODIGO').IsNull) or
         (DeltaDS.FieldByName('CCRED_CODIGO').AsInteger = -1)
      then
        DeltaDS.FieldByName('CCRED_CODIGO').NewValue := qg;//Valor da chave 
mestre
      UpdateRecordAutoInc(DeltaDS,UpdateKind,DeltaDS.FieldByName('CCIT_CODIGO').Index); 
//auto-incremento
    end;
  end;


Se no DataSetProvider você habilitar a opção poPropagateChanges, você vai 
vizualizar estas modificações após o retorno do ApplyUpdates


Espero ter ajudado

[]'s

Francisco Thiago de Almeida
Enter & Plug Informática
Divisão: Desenvolvimento e Banco de dados
Franca / SP
msn: thiago em enterplug.com.br
http://enterplug.no-ip.com/sistema_ctrc/

----- Original Message ----- 
From: "Jeferson Oliveira" <jefersonfoliveira em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, June 19, 2006 5:05 PM
Subject: Re: [firebase-br] Off-Topic - Master/detail no TClientDataSet


Michel,

Acredito que esse artigo lhe ajudará:
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=58&mode=thread&order=0&thold=0
.

Abraço!
Jeferson Oliveira


Em 19/06/06, michel <michelsugimoto em yahoo.com.br> escreveu:
>
> Pessoal, estou com um problema... nao consigo fazer a relacao
> master/detail com o componente TClientDataSet. há algum segredo? com
> tabela funciona, mas com o TClientDataSet nao... uso uma query como
> fonte de dados do provider.
>
> Estou usando o Filter... mas demora d+.
>
> []s, t+
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Atenciosamente,

Jeferson Oliveira
(31) 9202-8365
jefersonfoliveira em gmail.com
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 


		
_______________________________________________________ 
Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. Registre seu aparelho agora! 
http://br.mobile.yahoo.com/mailalertas/ 
 






Mais detalhes sobre a lista de discussão lista