Fórum Uma tabela mestre e duas/tres detalhes com DBExpress #370861
29/05/2009
0
Obrigado e aguardo qualquer ajuda.
Abraço a todos.
Aprendiz_ce
Curtir tópico
+ 0Posts
30/05/2009
Marco Salles
A mágica é feita com DataSources e apenas um DataSetProvider
ligado Ao Mestre e ao comamando Sql ( Usar o memso Parametro)
Exemplo de ligação
SqlMestre -->> Propriedade SqlConnection -->> Ligar ao SqlConnection
SqlDetalheMestre -->> Propriedade SqlConnection -->> Ligar ao SqlConnection
SqlDetalhe -->> Propriedade SqlConnection -->> Ligar ao SqlConnection
(DataSource) *****NOTE UM SO DATASOURCE para Os Tres
DspMestre --->> Ligado ao SqlMestre
DsMestre --->>> Ligado no SqlMestre
SqlDetalheMestre --->>> Propriedade DaTaSorce Ligado ao DsMestre
DsDetalhe ---->>> Ligado ao SqlDetalheMestre
SqlDetalhe --->>> Propriedade Datasouce Ligado ao DsDetalhe
Todos os Sql com a mesmo parametro (commandText)
SqlMestre
Select * From Tabela Mestre Where Mes_Cod =:Mes_Cod
SqlDetalheMestre
Select * From Tabela MestreDetalhe Where Mes_Cod =:Mes_Cod
SqlDetalhe
Select * From Tabela Detalhe Where Mes_Cod =:Mes_Cod
As Tes tabelas tem o Mesmo Campo (Mes_Cod) ***Que se relacionam
na Base de Dados
Na tabela Mestre
Mes_Cod é Chave Primaria
Na Tabela MestreDetalhe
Mes_Cod é Chave estrangeira para a Tabela Mestre
Na Tabela Detalhe
Mes_Cod é chave estrangeira para a Tabela DetalheMestre
É claro que tem que configurar os parametros , e tb os Providers Flags
Para ver se esta priemeira Etapa esta legau é dar um Open en cada SqlDataSetProvider
Se tudo der certo o proximo passo sera carregar e configuarar os Cds.
CdsMestre
Propriedade DataSetProvider --->> Ligar ao DspMestre
(De Duplo Clik e Adicione-os Tfields
Deve Aparecer um Campo DataSetNested dst que representa a Tabela
DetalheMestre
cdsDetalheMestre
Ai esta a Dica
Propriedade DataSetProvider --->> Deixar em BRANCO
propriedade DataSetField -->> Ligar ao Dst ( o Tfield ´especial´ que apareceu no CdsMestre
Novamente : De Duplo Clik e Adicione-os Tfields
Deve Aparecer um Campo DataSetNested dst que representa a Tabela
Detalhe
cdsDetalhe
Ai esta a Dica Novamente
Propriedade DataSetProvider --->> Deixar em BRANCO
propriedade DataSetField -->> Ligar ao Dst ( o Tfield ´especial´ que apareceu no CdsDetalheMestre
Novamente : De Duplo Clik e Adicione-os Tfields
Aqui ja não deve aparecer nenhum Tfield Especial
Para que isto funcione é necessário deixar todos os SQLDATASET ABERTOS
Conclusão::: O Processo é repetitivo , não é deve ser feito com Atençaõ
cada passo tera conseqeuncias no proximo passo.
Boa sorte
Gostei + 0
31/05/2009
Aprendiz_ce
A mágica é feita com DataSources e apenas um DataSetProvider
ligado Ao Mestre e ao comamando Sql ( Usar o memso Parametro)
Exemplo de ligação
SqlMestre -->> Propriedade SqlConnection -->> Ligar ao SqlConnection
SqlDetalheMestre -->> Propriedade SqlConnection -->> Ligar ao SqlConnection
SqlDetalhe -->> Propriedade SqlConnection -->> Ligar ao SqlConnection
(DataSource) *****NOTE UM SO DATASOURCE para Os Tres
DspMestre --->> Ligado ao SqlMestre
DsMestre --->>> Ligado no SqlMestre
SqlDetalheMestre --->>> Propriedade DaTaSorce Ligado ao DsMestre
DsDetalhe ---->>> Ligado ao SqlDetalheMestre
SqlDetalhe --->>> Propriedade Datasouce Ligado ao DsDetalhe
Todos os Sql com a mesmo parametro (commandText)
SqlMestre
Select * From Tabela Mestre Where Mes_Cod =:Mes_Cod
SqlDetalheMestre
Select * From Tabela MestreDetalhe Where Mes_Cod =:Mes_Cod
SqlDetalhe
Select * From Tabela Detalhe Where Mes_Cod =:Mes_Cod
As Tes tabelas tem o Mesmo Campo (Mes_Cod) ***Que se relacionam
na Base de Dados
Na tabela Mestre
Mes_Cod é Chave Primaria
Na Tabela MestreDetalhe
Mes_Cod é Chave estrangeira para a Tabela Mestre
Na Tabela Detalhe
Mes_Cod é chave estrangeira para a Tabela DetalheMestre
É claro que tem que configurar os parametros , e tb os Providers Flags
Para ver se esta priemeira Etapa esta legau é dar um Open en cada SqlDataSetProvider
Se tudo der certo o proximo passo sera carregar e configuarar os Cds.
CdsMestre
Propriedade DataSetProvider --->> Ligar ao DspMestre
(De Duplo Clik e Adicione-os Tfields
Deve Aparecer um Campo DataSetNested dst que representa a Tabela
DetalheMestre
cdsDetalheMestre
Ai esta a Dica
Propriedade DataSetProvider --->> Deixar em BRANCO
propriedade DataSetField -->> Ligar ao Dst ( o Tfield ´especial´ que apareceu no CdsMestre
Novamente : De Duplo Clik e Adicione-os Tfields
Deve Aparecer um Campo DataSetNested dst que representa a Tabela
Detalhe
cdsDetalhe
Ai esta a Dica Novamente
Propriedade DataSetProvider --->> Deixar em BRANCO
propriedade DataSetField -->> Ligar ao Dst ( o Tfield ´especial´ que apareceu no CdsDetalheMestre
Novamente : De Duplo Clik e Adicione-os Tfields
Aqui ja não deve aparecer nenhum Tfield Especial
Para que isto funcione é necessário deixar todos os SQLDATASET ABERTOS
Conclusão::: O Processo é repetitivo , não é deve ser feito com Atençaõ
cada passo tera conseqeuncias no proximo passo.
Boa sorte[/quote:5d0cfb990c]
Olá,
Confesso que fiquei meio confuso com o exemplo passado por você. Vou fazer um EXEMPLO na prática e vê se consigo entendê-lo melhor.
Outra coisa:
Esse exemplo tanto pode ser utilizado para consultar como inserir dados, né?
Muito obrigado pela sua atenção e qualquer coisa darei retorno.
Abraço.
Gostei + 0
31/05/2009
Marco Salles
é realmente... Pode ser que normalizai muito < este exemplo é o caso
de todas as tres tabelas se relacionarem com o mesmo codigo
Um exemplo é o caso de Tabela Clientes , Funcionarios e Fornecedore
que são pessoas fisicas ou Juridica que por sua ves são pessoas
Pq nada impede por exemplo um Funcionário ser Tb Cliente
O que ocorre com a maioria dos aplicativos é ter dois cadastro
Um endereço para Funcionario e Outro para o Funcionario Cliente
Porém esta reduntancia se resolve com Normalização e neste caso
usando a facilidade RAD do Delphi construimos o Relacionamento
Mestre Detalhe de modo bem simples
Mas Talvez vc queira um Exemplo menos normalizado ( com é o cado por
exempllo de :
Tabela Vendas --->> Tabela Clientes -->> Tabela Telefones dos clientes
Aonde
Tabela Vendas se relacina com Clientes
Tabela Clientes se relaciona com Telefones dos clientes
eu entendi errado sua duvida...
De qq Forma Monte primeiro a Tabela , defina os Relacionamentos e
pratique para ver as dificuldades.. A prática é nosso melhor aliado
Gostei + 0
01/06/2009
Aprendiz_ce
é realmente... Pode ser que normalizai muito < este exemplo é o caso
de todas as tres tabelas se relacionarem com o mesmo codigo
Um exemplo é o caso de Tabela Clientes , Funcionarios e Fornecedore
que são pessoas fisicas ou Juridica que por sua ves são pessoas
Pq nada impede por exemplo um Funcionário ser Tb Cliente
O que ocorre com a maioria dos aplicativos é ter dois cadastro
Um endereço para Funcionario e Outro para o Funcionario Cliente
Porém esta reduntancia se resolve com Normalização e neste caso
usando a facilidade RAD do Delphi construimos o Relacionamento
Mestre Detalhe de modo bem simples
Mas Talvez vc queira um Exemplo menos normalizado ( com é o cado por
exempllo de :
Tabela Vendas --->> Tabela Clientes -->> Tabela Telefones dos clientes
Aonde
Tabela Vendas se relacina com Clientes
Tabela Clientes se relaciona com Telefones dos clientes
eu entendi errado sua duvida...
De qq Forma Monte primeiro a Tabela , defina os Relacionamentos e
pratique para ver as dificuldades.. A prática é nosso melhor aliado[/quote:9d10eeb859]
Entendo prefeitamente o que você quis dizer. Utilizando NORMATIZAÇÃO com você mesmo menciona, a coisa fica até melhor.
Estou vendo aqui como fazer o que eu necessito baseado no seu exemplo e caso eu me nao consiga, vou aqui pra informar.
Obrigado pela sua atenção.
Abraço.
Gostei + 0
02/06/2009
Aprendiz_ce
é realmente... Pode ser que normalizai muito < este exemplo é o caso
de todas as tres tabelas se relacionarem com o mesmo codigo
Um exemplo é o caso de Tabela Clientes , Funcionarios e Fornecedore
que são pessoas fisicas ou Juridica que por sua ves são pessoas
Pq nada impede por exemplo um Funcionário ser Tb Cliente
O que ocorre com a maioria dos aplicativos é ter dois cadastro
Um endereço para Funcionario e Outro para o Funcionario Cliente
Porém esta reduntancia se resolve com Normalização e neste caso
usando a facilidade RAD do Delphi construimos o Relacionamento
Mestre Detalhe de modo bem simples
Mas Talvez vc queira um Exemplo menos normalizado ( com é o cado por
exempllo de :
Tabela Vendas --->> Tabela Clientes -->> Tabela Telefones dos clientes
Aonde
Tabela Vendas se relacina com Clientes
Tabela Clientes se relaciona com Telefones dos clientes
eu entendi errado sua duvida...
De qq Forma Monte primeiro a Tabela , defina os Relacionamentos e
pratique para ver as dificuldades.. A prática é nosso melhor aliado[/quote:7c42c1b003]
Entendo prefeitamente o que você quis dizer. Utilizando NORMATIZAÇÃO com você mesmo menciona, a coisa fica até melhor.
Estou vendo aqui como fazer o que eu necessito baseado no seu exemplo e caso eu me nao consiga, vou aqui pra informar.
Obrigado pela sua atenção.
Abraço.[/quote:7c42c1b003]
Olá,
Fiz o procedimento e deu tudo certinho.
Agora, me tira outra dúvida se possível. Caso eu queira deixa a ´regra de negocios´ no banco de dados como seria o procedimento E também no caso de estar utilizando ´3 camadas´ como ficaria se procediemento?
Obrigado mais uma vez pela sua atenção e aguardo retorno.
Um forte abraço.
Gostei + 0
02/06/2009
Marco Salles
Mesmo que vc esteja usando uma Aplicação Cliente\Server ´Normal´
O DbExpress Local funciona de forma muito semelhante ao DataSnap
Multicamadas por fazer uso dos componentes ClientDataSet e
DataSetProvider
As ligações (procedimentos) se é que eu entendi direito , praticamente
são as mesmas , so que as camadas se comunicarão atraves de
protocolos que implemetaraão uma interface..Agora o tipo de protocolo
que será utilizado nesta comunicação , dependerá da Tecnologia
escolhida .Geralmente se esta utilizando : O COM+, O SOAP , BSS
pois algumas outros protocolos suportados pelo DataSnap , foram
descontinuados.
Ai vd deve Usar Stored Procedures e Triggers ..O que consiste isto ?
é vc executar inserçoes diretamente no Banco sem Utilizar métodos
ou funçoes na Aplicação Delphi . Um exemplo prético é o Relacionamento
entre uma Tabela [parcela] e uma Tabela [Caixa] ... Para cada baixa
da Tabela [Parcela] é gerada um lançamento na Tabela [caixa]
Porém outras situações de Relacionamentos (com é o caso de [Telefones]
e [clientes] , não requer o uso de Stored Procedures e Triggers . Pois nen
todo cliente tem telefone e essas inserções não são Automaticas a ponto
de uma gerar outra automaticamente
Então a aplicação disso é criteriosa e particular
Gostei + 0
03/06/2009
Aprendiz_ce
Mesmo que vc esteja usando uma Aplicação Cliente\Server ´Normal´
O DbExpress Local funciona de forma muito semelhante ao DataSnap
Multicamadas por fazer uso dos componentes ClientDataSet e
DataSetProvider
As ligações (procedimentos) se é que eu entendi direito , praticamente
são as mesmas , so que as camadas se comunicarão atraves de
protocolos que implemetaraão uma interface..Agora o tipo de protocolo
que será utilizado nesta comunicação , dependerá da Tecnologia
escolhida .Geralmente se esta utilizando : O COM+, O SOAP , BSS
pois algumas outros protocolos suportados pelo DataSnap , foram
descontinuados.
Ai vd deve Usar Stored Procedures e Triggers ..O que consiste isto ?
é vc executar inserçoes diretamente no Banco sem Utilizar métodos
ou funçoes na Aplicação Delphi . Um exemplo prético é o Relacionamento
entre uma Tabela [parcela] e uma Tabela [Caixa] ... Para cada baixa
da Tabela [Parcela] é gerada um lançamento na Tabela [caixa]
Porém outras situações de Relacionamentos (com é o caso de [Telefones]
e [clientes] , não requer o uso de Stored Procedures e Triggers . Pois nen
todo cliente tem telefone e essas inserções não são Automaticas a ponto
de uma gerar outra automaticamente
Então a aplicação disso é criteriosa e particular[/quote:a89325e75a]
Beleza, mas quanto as tecnologias empregadas para 3 camadas e stored procedues/triggers para a regra de negocios no banco de dados, eu não tenho dúvidas não. A minha dúvida mesmo é sobre a interface/acesso a dados do aplicativo. No segundo caso, como é que eu monto isso? Da mesma forma com o DBExpress ou não?
Obrigado mais uma vez pela sua atenção e aguardo seu comentário.
Abraço.
Gostei + 0
03/06/2009
Aprendiz_ce
Mesmo que vc esteja usando uma Aplicação Cliente\Server ´Normal´
O DbExpress Local funciona de forma muito semelhante ao DataSnap
Multicamadas por fazer uso dos componentes ClientDataSet e
DataSetProvider
As ligações (procedimentos) se é que eu entendi direito , praticamente
são as mesmas , so que as camadas se comunicarão atraves de
protocolos que implemetaraão uma interface..Agora o tipo de protocolo
que será utilizado nesta comunicação , dependerá da Tecnologia
escolhida .Geralmente se esta utilizando : O COM+, O SOAP , BSS
pois algumas outros protocolos suportados pelo DataSnap , foram
descontinuados.
Ai vd deve Usar Stored Procedures e Triggers ..O que consiste isto ?
é vc executar inserçoes diretamente no Banco sem Utilizar métodos
ou funçoes na Aplicação Delphi . Um exemplo prético é o Relacionamento
entre uma Tabela [parcela] e uma Tabela [Caixa] ... Para cada baixa
da Tabela [Parcela] é gerada um lançamento na Tabela [caixa]
Porém outras situações de Relacionamentos (com é o caso de [Telefones]
e [clientes] , não requer o uso de Stored Procedures e Triggers . Pois nen
todo cliente tem telefone e essas inserções não são Automaticas a ponto
de uma gerar outra automaticamente
Então a aplicação disso é criteriosa e particular[/quote:5571b3635c]
Beleza, mas quanto as tecnologias empregadas para 3 camadas e stored procedues/triggers para a regra de negocios no banco de dados, eu não tenho dúvidas não. A minha dúvida mesmo é sobre a interface/acesso a dados do aplicativo. No segundo caso, como é que eu monto isso? Da mesma forma com o DBExpress ou não?
Obrigado mais uma vez pela sua atenção e aguardo seu comentário.
Abraço.[/quote:5571b3635c]
complementando:
Mas a dúvida é em cima da questão do ´mestre/detalhe´.
Espero que tenha entendido.
Gostei + 0
05/06/2009
Marco Salles
Então , monte o Banco peq. com poucos bancos
Passe para mim
Que eu monto para vc a estrutura
Ok...
Gostei + 0
06/06/2009
Aprendiz_ce
Então , monte o Banco peq. com poucos bancos
Passe para mim
Que eu monto para vc a estrutura
Ok...[/quote:b08ce3addd]
Olá Marco,
Você pode montar um exemplo ou até mesmo me mostra uma rotina que você já tenha por aí, ok?
Banco para exemplo:
TABELA CLIENTES - CODIGO CLIENTE
NOME CLIENTE
TABELA PRODUTOS - CODIGO PRODUTO
DESCRICAO DO PRODUTO
PRECO DO PRODUTO
TABELA PEDIDOS - CODIGO PEDIDO
EMISSAO PEDIDO
CLIENTE PEDIDO
TABELA ITENS - CODIGO PEDIDO
CODIGO PRODUTO
QUANTIDADE PRODUTO
Só lembrando que a minha duvida é somente com relacão a como MONTAR o aplicativo (cliente) nos dois formatos (regras de negocio no DB e/ou 3 camadas com datasnap). Sempre trabalhei com as regras no aplicativo e como as vezes o aplicativo acessa um DB REMOTO, a performance cai bastante e quero dar uma melhorada nessa questão de acesso remoto.
Outra dúvida:
No caso do aplicativo ficar em ´3 camadas´... Tentei algum tipo de problema em instala-lo em um unico computador acessando dados local e na própria máquna ou não?
Mas uma vez obrigado pela sua atenção e aguardo retorno.
Um forte abraço.
Gostei + 0
08/06/2009
Marco Salles
Ja lhe enviei umMini Exemplo
Gostei + 0
08/06/2009
Aprendiz_ce
Ja lhe enviei umMini Exemplo[/quote:b6d6235cf3]
Beleza, vou dar uma olhadinha no mesmo e dou retorno.
Muitissimo obrigado pela sua pronta atenção.
Um forte abraço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)