Fórum Campos lookup em branco e causando lentidão!!! #38605
09/09/2003
0
Tenho uma tebela PEDIDOS, que inseri 6 campos lookup (Fornecedor, transp., Nat. operaçao, etc), além da tabela detalhe ITENS que possui mais 1 campo lookup (da descrição do item).
O problema é que fica lento na hora de abrir o form, pois tenho que abrir a tabela PEDIDOS e ITENS (mestre/detalhe com IBDATASET). E mais 6 tabelas (com IBQUERY) que são as tabelas que uso no lookup. Além de quando estou editando ou inserindo, os campos lookup ficam em branco, não mostrando a descrição.
No IBDATASET de PEDIDOS, uso: ´Select * from pedidos where pedido=1´.
Alguém tem alguma sugestão para agilizar na hora de abrir o form e os campos lookup não ficarem em branco?
Até +
Ivonei
Curtir tópico
+ 0Posts
12/09/2003
Rage_against
Gostei + 0
12/09/2003
Afarias
1 - procure trazer os campos de outras tabelas no seu SELECT com JOINS
2 - para tabelas mais ´estáticas´ (ex: NAT. OPERAÇÃO) procure carregar os valores uma vez para uma tabela em memória (ex: ClientDataSet) para fazer os LOOKUPs.
3 - para as tebelas mais ´dinâmicas´ (e grandes) não faça LOOKUPs, proporcione PESQUISAS para encontrar apenas O registro ou uma PEQUENA quantidade deles.
T+
Gostei + 0
12/09/2003
Ivonei
1 - procure trazer os campos de outras tabelas no seu SELECT com JOINS
[color=blue:ac39769df3]R.: Nunca fiz um joi. Vou tentar fazer, mas ficarei grato se voce pudesse exemplificar um ´select com joins´ no lugar dos seis campos lookup.
[/color:ac39769df3]
2 - para tabelas mais ´estáticas´ (ex: NAT. OPERAÇÃO) procure carregar os valores uma vez para uma tabela em memória (ex: ClientDataSet) para fazer os LOOKUPs.
[color=blue:ac39769df3]R.: Estou usando Query para estas tabelas e fazendo lookup. No caso da Nat. Operação, você diz que posso usar Lookup sem problemas?[/color:ac39769df3]
3 - para as tebelas mais ´dinâmicas´ (e grandes) não faça LOOKUPs, proporcione PESQUISAS para encontrar apenas O registro ou uma PEQUENA quantidade deles.
[color=blue:ac39769df3]R.: Não entendi. Se eu quero mostrar o nome do cliente que está num cadastro com 6500 registros, cada vez que inserir um novo item, como fazer esta pesquisa, sem causar lentidão no processo? Não seria melhor usar o join?[/color:ac39769df3]
Abraços
Gostei + 0
12/09/2003
Afarias
|exemplificar um ´select com joins´ no lugar dos seis campos lookup.
Faça o JOIN apenas nas tabelas q não for fazer LOOKUP, ex::
select vendas.data, vendas.cli_cod, clientes.nome
from vendas inner join clientes on (vendas.cli_cod = clientes.cli_cod)
where vendas.numero = 1234;
Existem vários tipos e formas de JOINS, o melhor a fazer é dá uma lida na documentação do INTERBASE.
|R.: Estou usando Query para estas tabelas e fazendo lookup. No caso da
|Nat. Operação, você diz que posso usar Lookup sem problemas?
Sim, (acho) -- já q trata-se de algo ´estático´ ... os usuários normalmente não ficam cadastrando nat. de operação o tempo todo. E, também trata-se de uma tabela pequena (com poucos registros) -- essas são duas qualidades q fazem uma tabela ser ótima para LOOKUP -- vc pode carregar os valores no início da oparação (entrada na tela de vendas por exemplo) ou ainda MELHOR :: carregar os registros para uma ´tabela em memória´ (tipo ClientDataSet) e ficar usando estes registros sem ter que ficar carregando do banco o tempo todo.
|R.: Não entendi. Se eu quero mostrar o nome do cliente que está num
|cadastro com 6500 registros, cada vez que inserir um novo item, como
|fazer esta pesquisa, sem causar lentidão no processo? Não seria melhor
|usar o join?
O JOIN vc vai usar para trazer os registros (SELECT) ... e as pesquisas, quando quizer alterar ou inserir um valor (INSERT, UPDATE).
Exemplo:: vou fazer uma nova venda, então digito o CPF do cliente -- mas eu preciso da CHAVE (CLI_COD) para jogar na tabela de clientes ... então eu pesquiso pelo CPF o CLI_COD do cliente -- e se eu não tiver o CPF ?? então, permito uma consulta por nome (o usuário entra com o primeiro nome e vc pesquisa todos os que começam com ele) ... pronto!!
Assim, durante a venda, vc não precisa carregar os 6500 registros para fazer o LOOKuP ... deve carregar uns poucos de 1 a 20 registros por ex.
T+
Gostei + 0
12/09/2003
Ivonei
Exemplo:: vou fazer uma nova venda, então digito o CPF do cliente -- mas eu preciso da CHAVE (CLI_COD) para jogar na tabela de clientes ... então eu pesquiso pelo CPF o CLI_COD do cliente -- e se eu não tiver o CPF ?? então, permito uma consulta por nome (o usuário entra com o primeiro nome e vc pesquisa todos os que começam com ele) ... pronto!!
Assim, durante a venda, vc não precisa carregar os 6500 registros para fazer o LOOKuP ... deve carregar uns poucos de 1 a 20 registros por ex.
É que faço assim: Num form de busca, uso ´Cliente.Locate(´CODCLI´,edit1.text,[loPartialKey]);´ para localizar o cliente cfe o usuário vai digitando.
Do seu jeito, pelo que entendi, o usuário digita um nome, clica num botão ´procurar´ para filtrar o nome num ´select com Like´ e só depois escolhe uma das alternativas filtradas. Não seria mais complicado (menos prático)?
Por favor, me corrija se eu estiver errado.
Gostei + 0
12/09/2003
Afarias
|(´CODCLI´,edit1.text,[loPartialKey]);´ para localizar o cliente cfe o
|usuário vai digitando.
Esse tipo de código/interface não condiz com as ´boas práticas´ para aplicações C/S
|Do seu jeito, pelo que entendi, o usuário digita um nome, clica num
|botão ´procurar´ para filtrar o nome num ´select com Like´ e só depois
|escolhe uma das alternativas filtradas.
Correto.
|Não seria mais complicado (menos prático)?
|Por favor, me corrija se eu estiver errado.
Pode ser menos ´prático´, mas garante performance -- é questão de escolha :: o q é mais importante para vc (seu sistema).
T+
Gostei + 0
12/09/2003
Ivonei
Esclareceu-me as dúvidas que tinha a respeito. :D
Abraços
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)