[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