Locate super lento...
Olá
Tô com um programa em Delphi e SQLServer7; nesse banco tenho uma tabela de produtos com +- 3500 registros e tô usando o locate pra encontrar um registro através do código, só que a localização tá demorando uns 30 segundos:
A query:
SELECT Produto.IdProduto, Produto.IdCadeia, Produto.Descricao, Produto.LinhaProduto, Produto.Preco, Produto.PrecoAtacado, Produto.Foto, Produto.Unidade, Produto.TipoProduto, Produto.IdFornecedor, Produto.IdOrigem, Linhaproduto.Descricao, Produto.PrecoCompra
FROM Produto Produto, LinhaProduto Linhaproduto
WHERE (Linhaproduto.IdLinhaProduto = Produto.LinhaProduto) And
(Produto.LinhaProduto = :LinhaProduto)
ORDER BY Produto.IdProduto
a rotina de localização:
If Not DSPrincipal.DataSet.Locate(´IdProduto´, StrToInt(EdtPesqProd.Text), []) Then
ShowMessage(´Referência de Produto não se encontra cadastrada!´);
alguém pode me dizer o que pode tá acontecendo; existe algum método de busca mais ágil?
Obrigado
Té +.
Tô com um programa em Delphi e SQLServer7; nesse banco tenho uma tabela de produtos com +- 3500 registros e tô usando o locate pra encontrar um registro através do código, só que a localização tá demorando uns 30 segundos:
A query:
SELECT Produto.IdProduto, Produto.IdCadeia, Produto.Descricao, Produto.LinhaProduto, Produto.Preco, Produto.PrecoAtacado, Produto.Foto, Produto.Unidade, Produto.TipoProduto, Produto.IdFornecedor, Produto.IdOrigem, Linhaproduto.Descricao, Produto.PrecoCompra
FROM Produto Produto, LinhaProduto Linhaproduto
WHERE (Linhaproduto.IdLinhaProduto = Produto.LinhaProduto) And
(Produto.LinhaProduto = :LinhaProduto)
ORDER BY Produto.IdProduto
a rotina de localização:
If Not DSPrincipal.DataSet.Locate(´IdProduto´, StrToInt(EdtPesqProd.Text), []) Then
ShowMessage(´Referência de Produto não se encontra cadastrada!´);
alguém pode me dizer o que pode tá acontecendo; existe algum método de busca mais ágil?
Obrigado
Té +.
Oquendo
Curtidas 0
Respostas
Vinicius2k
20/06/2004
Colega,
Locate é realmente muito lento, mas 30 segundos para 3.500 linhas chega a ser um exagero...
Posso lhe sugerir o que eu uso, é um pouco mais trabalhoso, mas garanto que vc vai ter um resultado muito melhor...
Faça uma query auxliar que só busque no servidor o que lhe interessa, ou seja, a ID do Produto, com uma cláusula where igual a da query principal + um parametro que receberé o conteúdo do TEdit... Após o Open, utilize o método IsEmpty para verificar se ela está vazia... se estiver o produto não existe, se não estiver vazia é porque existe...
Espero ter ajudado...
T+
Locate é realmente muito lento, mas 30 segundos para 3.500 linhas chega a ser um exagero...
Posso lhe sugerir o que eu uso, é um pouco mais trabalhoso, mas garanto que vc vai ter um resultado muito melhor...
Faça uma query auxliar que só busque no servidor o que lhe interessa, ou seja, a ID do Produto, com uma cláusula where igual a da query principal + um parametro que receberé o conteúdo do TEdit... Após o Open, utilize o método IsEmpty para verificar se ela está vazia... se estiver o produto não existe, se não estiver vazia é porque existe...
Espero ter ajudado...
T+
GOSTEI 0