Relacionamento com DbExpress
Veja a seguinte situação:
Tenho 3 tabelas
Clientes
Id_Cliente
Nome...
SubClientes
Id_SubCliente
IdCliente
Nome...
Cheques
Id_Cheques
Id_SubCliente
Data...
Percebe que tenho um relacionamento simples de 1:N entre Clientes e SubClientes e outro relacionamento 1:N entre SubClientes e Cheques.
De acordo com a explicação do Rodrigo... Podemos usar o DBExpress para fazer esse relacionamento. Sendo:
Um ClientDataSet ligando com um DataSetProvider que por sua vez ligando com o SqlDataSet. Nesse caso para a tabela PAI (Clientes)
O relacionamento do FILHO (SubCliente) é feito com:
Um ClientDataSet ligando diretamente com o SqlDataSet através da propriedade DataSetField. E por fim usamos um DataSource para conectar o SqlDataSet (Filho) com o SqlDataSet (Pai)
Esse processo funciona perfeitamente.
Porém quando fui fazer o mesmo relacionamento de outro Filho(Cheques) com o Filho anterior(SubCliente)i, faltou informação. Pois na estrutura de componentes da tabela filho não se usa o DataSetProvider e assim não consegui ligar o último relacionamento.
Warlen Oliveira
Curtidas 0
Respostas
Wesley Yamazack
13/08/2009
Olá meu amigo, Bom dia.
Experimente colocar na query Cheque,
select * from cheque where idcliente = :idcliente (isso é um exemplo, tem que ser o mesmo parametro que você esta usando pra igualar o subcliente)
E veja se funciona.
Um abraço
Experimente colocar na query Cheque,
select * from cheque where idcliente = :idcliente (isso é um exemplo, tem que ser o mesmo parametro que você esta usando pra igualar o subcliente)
E veja se funciona.
Um abraço
GOSTEI 0
Warlen Oliveira
13/08/2009
Olá meu caro,
Até aí, tudo certo. Mas quando vou fazer o segundo relacionamento (Cheques com sub_cliente) tenho problema com a ligação do campo chave. Pois o Data source não aceita ligar a um SqlDataSet que já esteja ligado a outro.
Lembre que tenho 3 níveis de relacionamento:
Clientes - Sub_Clientes - Cheques (Um dentro do outro respectivamente) Então como ficaria a ligação de SubClientes com cheques ao mesmo tempo que tenho a ligação de Clientes com Sub_Clientes?
Aguardo
GOSTEI 0
Wesley Yamazack
13/08/2009
Olá,Boa tarde.
Irei desenvolver um exemplo, e logo retornarei.
Peço que aguarde um pouco mais.
Um abraço
Wesley Y
Irei desenvolver um exemplo, e logo retornarei.
Peço que aguarde um pouco mais.
Um abraço
Wesley Y
GOSTEI 0
Warlen Oliveira
13/08/2009
Caro Wesley,
Você acha que ainda demora no exemplo?
Estou precisando de implementar esse recurso em uma aplicação.
Obrigado.
GOSTEI 0
Wesley Yamazack
13/08/2009
Olá meu caro,
Amanha esterei postando o exemplo, peço que aguarde um pouco mais.
Grato pela compreensão.
Wesley Y
Amanha esterei postando o exemplo, peço que aguarde um pouco mais.
Grato pela compreensão.
Wesley Y
GOSTEI 0
Wesley Yamazack
13/08/2009
Olá meu amigo, segue abaixo o que você deverá fazer.
Desculpe pela demora.
Um abraço
Wesley Y
Desculpe pela demora.
Um abraço
Wesley Y
GOSTEI 0
Warlen Oliveira
13/08/2009
Ok caro wesley,
Mas nessa estrutura teremos problemas com uso do DbGrid. Pois ele é multi-direcional.
Como faria para usá-lo
Obrigado
GOSTEI 0
Wesley Yamazack
13/08/2009
Olá meu amigo,
Se você olhar a nova figura, irá ver apenas um DataSetProvider,
faça a ligação do mesmo normalmente.
No CdsClientes, adicione todos os Fields, irá notar que ele irá adicionar um outro field com o nome bem parecido com QrySubClientes;
No CdsSubClientes, va na propriedade DataSetField e selecione o
CdsClientesQrySubClientes.
No CdsChequesva na propriedade DataSetField e selecione o
CdsSubClientesQryCheques.
Aponte seus DataSources, para os ClientDataSet, e ao abrir o primeiro CDs, outros seram aberto, automaticamente.
Um abraço,
Wesley Y
Se você olhar a nova figura, irá ver apenas um DataSetProvider,
faça a ligação do mesmo normalmente.
No CdsClientes, adicione todos os Fields, irá notar que ele irá adicionar um outro field com o nome bem parecido com QrySubClientes;
No CdsSubClientes, va na propriedade DataSetField e selecione o
CdsClientesQrySubClientes.
No CdsChequesva na propriedade DataSetField e selecione o
CdsSubClientesQryCheques.
Aponte seus DataSources, para os ClientDataSet, e ao abrir o primeiro CDs, outros seram aberto, automaticamente.
Um abraço,
Wesley Y
GOSTEI 0
Warlen Oliveira
13/08/2009
Obrigado,
Mas estou com um pequeno problema.
Nessa colocaçào que você fez:
No CdsClientes, adicione todos os Fields, irá notar que ele irá adicionar um outro field com o nome bem parecido com QrySubClientes;
não está aparecendo esse campo. O que pode ser? conferi as ligações e nào encontrei diferença
não está aparecendo esse campo. O que pode ser? conferi as ligações e nào encontrei diferença
GOSTEI 0
Wesley Yamazack
13/08/2009
Olá meu caro,
Fiz um exemplo com firebird, e delphi 7, abra o projeto e veja o que fez de errado, pois tudo que te passei foi o que fiz. Seguem os links;
http://www.4shared.com/file/126467564/3c91a86f/BDCHAMADO.html
http://www.4shared.com/file/126467389/d82e85ee/MasterDetalhe-_3_Camadas.html
Um abraço
Wesley Y
Fiz um exemplo com firebird, e delphi 7, abra o projeto e veja o que fez de errado, pois tudo que te passei foi o que fiz. Seguem os links;
http://www.4shared.com/file/126467564/3c91a86f/BDCHAMADO.html
http://www.4shared.com/file/126467389/d82e85ee/MasterDetalhe-_3_Camadas.html
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
13/08/2009
Olá meu caro,
Consegui ver o exemplo ? Estamos aguardando para fecharmos o chamado.
Att,
Wesley Y
Consegui ver o exemplo ? Estamos aguardando para fecharmos o chamado.
Att,
Wesley Y
GOSTEI 0