[firebase-br] Identificador para tabelas

Francisco Thiago jeandeadlucky em yahoo.com.br
Ter Maio 3 18:20:54 -03 2005


kra, deixa eu ver se entendi.

Você quer uma espécie de super consulta, onde na tabela de pedido, se o 
usuário digitar o nome do Cliente, esta consulta traga todos os cliente 
certo? E para piorar a situação, você ainda quer que o kra altere esses 
dados?

Você pode fazer o seguinte:

1º

Monte uma tela de consulta e faça o select utilizando joins.
Ae quando o usuario escolher, por exemplo, o nome do cliente, ele traga os 
pedidos do cliente

Select Pedido.NumPedido
     , Clientes.NomeCliente
from Pedido
  join Clientes on Clientes.Codigo = Pedido.CodigoClientes
where
  Clientes.NomeCliente = 'José das Cucuias'

Funciona do jeito que vc qr.

2º
O mesmo esquema acima, só que depois vc devolve apenas a chave do Pedido 
para uma outra consulta e traz os dados do pedido tranquilo... e pode editar 
e tudo... Daí sua tela de pesquisa ficaria realmente genérica.

3º (Caso esteja utilizando ClientDataSet)
Cria uma view com os dados necessário, Chama ela pelo CDS e no Evento 
OnGetTable coloca o nome da tabela. Não se esqueça que desta forma você 
precisa trazer na view os nomes exatos dos campos a serem atualizados e 
ainda por cima desmarcar para alteraçãos os campos inalteráveis (nome do 
cliente por exemplo). NUNCA TENTEI ISSO....

Caso o problema seja filtros e ordenações por colunas, você pode usar 
índices automáticos e campos de filtros. Com o CDS é muito fácil fazer isso. 
Dessa forma você já economiza alguns select no banco... já que para 
reordenar uma coluna, vc teria que requisitar os mesmos campos ao BD.

Espero ter entendido a sua questão e ter ajudado vc um pouquinho

[]'s e boa sorte

Francisco Thiago de Almeida
Enter&Plug Informática
Divisão: Desenvolvimento e Banco de dados
MSN: thiago em enterplug.com.br
Skype: enterplug_thiago


----- Original Message ----- 
From: "Edson T. Marques" <marques em oriontec.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, May 03, 2005 5:42 PM
Subject: Re: [firebase-br] Identificador para tabelas


>
> Infelizmente não posso usar view.
> Nós temos um componente, feito em delphi, que permite fazer a manipulação 
> das consultas que são exibidas na tela para o usuário. Com este componente 
> nós implementamos funcionalidades muito importantes para o nosso sistema. 
> Uma delas é, por exemplo, se o usuário vê na tela o Grid de produtos 
> cadastrados ele poderá fazer filtros da maneira que ele quizer, em 
> qualquer coluna, que os filtros (tem uma interface apropriada para isso) 
> são transformados em SQL e incorporados na clausula where da consulta que 
> retorna oque ele está vendo.
>
> Se eu criar uma view no banco de dados para retornar esses dados, além de 
> eu não me livrar dos joins (porque o select da view também vai ter que ter 
> as junções), o esquema do componente vai fazer selects sobre result set da 
> view, bom...  aí é que a vaca vai pro brejo pra valer!
>
> Eu preciso é de uma sentença sobre essa questão.
> Na sua opinião oque que é menos pior os campos calculados ou os joins?
>
> [s]
> Edson.
>
> Eduardo Jedliczka escreveu:
>
>>Edson,
>>
>>Para o seu caso, a melhor solução seria criar uma VIEW.  - Recomendo a
>>leitura dos PDFs do Interbase 6 sobre Views e Joins.
>>
>>Dependendo do seu componente de acesso, poderia gravar os campos na tabela
>>real e consultar pela view, em outros casos, poderia criar algumas 
>>Triggers
>>na view para realizar o insert, delete e update...
>>
>>Posso dar mais detalhes à noite...
>>
>>[s]
>>
>>==========================
>>Eduardo Jedliczka
>>Gerasoft Informática
>>Apucarana - Pr
>>==========================
>>
>>----- Original Message ----- 
>>From: "Edson T. Marques" <marques em oriontec.com.br>
>>To: "FireBase" <lista em firebase.com.br>
>>Sent: Tuesday, May 03, 2005 4:16 PM
>>Subject: Re: [firebase-br] Identificador para tabelas
>>
>>
>>
>>>Ok!
>>>
>>>Sem querer ser chato... e já sendo, vamos a um exemplo prático.
>>>
>>>Meu banco de dados possui uma tabela de produtos com 70 campos. Essa
>>>tabela de produtos se relaciona com 10 outras tabelas:
>>>Grupos, SubGrupos, Classificações1, Classificações2, Classificações3,
>>>Classificações4, Fabricantes, Unidades, CategoriasDimensionais e
>>>ClassificaçãoFiscal.
>>>Em cada uma dessas tabelas existe uma chave primária que tem um
>>>relacionamento com a tabela de produtos e existe outro campo VARCHAR com
>>>a descrição.
>>>A tabela de produtos, portanto, possui um índice de fk para cada chave
>>>do relacionamento.
>>>
>>>Atualmente, então, minha tabela de produtos possui os 70 campos que
>>>falei mais 10 campos com as chaves das tabelas com que se relaciona.
>>>Alem disso mais 10 campos calculados com select (daquele jeito) para me
>>>dar as descrições dos registros das tabelas com as quais a tabela de
>>>produto se relaciona.
>>>
>>>Assim:
>>>
>>>CREATE TABLE PRODUTO (
>>>   CHAVEPRO INTEGER NOT NULL,
>>>   CHAVEGRU CHAR(3),
>>>   CHAVESGR CHAR(3),
>>>   CHAVECL1 CHAR(3),
>>>   CHAVECL2 CHAR(3),
>>>   CHAVECL3 CHAR(3),
>>>   CHAVECL4 CHAR(3),
>>>   CHAVEFAB CHAR(3),
>>>   CHAVECDI NUMERIC(2,0) DEFAULT 0,
>>>   CHAVECLF VARCHAR(2),
>>>   UNIDADE VARCHAR(3) NOT NULL,
>>>   REFERENCIA VARCHAR(15),
>>>   NOME VARCHAR(50) NOT NULL COLLATE WIN_PTBR,
>>>   NOMEECF VARCHAR(30),
>>>   COMPLEMENTO VARCHAR(256),
>>>   COR VARCHAR(10),
>>>...
>>>
>>>  FABRICANTE COMPUTED BY ((select Nome from Fabricante F where
>>>F.ChaveFab = Produto.ChaveFab)),
>>>  GRUPO COMPUTED BY ((select Nome from Grupo G where G.ChaveGru =
>>>Produto.ChaveGru)),
>>>  SUBGRUPO COMPUTED BY ((select Nome from SubGrupo S where S.ChaveSGr =
>>>Produto.ChaveSGr)),
>>>  CLASSIFIC1 COMPUTED BY ((select Nome from Classific1 C where
>>>C.ChaveCl1 = Produto.ChaveCl1)),
>>>  CLASSIFIC2 COMPUTED BY ((select Nome from Classific2 C where
>>>C.ChaveCl2 = Produto.ChaveCl2)),
>>>  CLASSIFIC3 COMPUTED BY ((select Nome from Classific3 C where
>>>C.ChaveCl3 = Produto.ChaveCl3)),
>>>  CLASSIFIC4 COMPUTED BY ((select Nome from Classific4 C where
>>>C.ChaveCl4 = Produto.ChaveCl4)),
>>>  DESCRCDIM COMPUTED BY ((select Descricao from CatDimens C where
>>>C.ChaveCDi = Produto.ChaveCDi)),
>>>  CLASSFISC COMPUTED BY ((select CODIGO from CLASSFISC C where
>>>C.ChaveClF = Produto.ChaveClF)),
>>>  ...
>>>);
>>>
>>>Então, na interface (cliente) eu só dou um select nessa tabela e tenho
>>>todos os campos que necessito.
>>>Aí beleza, É o que eu tenho atualmente.
>>>Neste caso você me orientaria a mudar essa estrutura, eliminar os campos
>>>calculados e fazer joins para obter o campos na interface. Dessa forma
>>>eu teria uma performance muito melhor?
>>>
>>>Seria isso?
>>>
>>>
>>>
>>>______________________________________________
>>>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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://search.gmane.org/search.php?group=firebase
>>
>>>
>>
>>
>>______________________________________________
>>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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://search.gmane.org/search.php?group=rebase
>>
>>
>>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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://search.gmane.org/search.php?group=firebase
> 








Mais detalhes sobre a lista de discussão lista