SUSPENDER CONSULTA A BANCO DE DADOS
Pessoal...
Preciso ver se alguém pode me ajudar
Tenho um formulário de consultas a banco de dados que, a medida em que vou digitando, aparecem todos os produtos cujo nome iniciem, ou contenham os caracteres desejados.
Acontece que muitas vezes os clientes digitam um único caracter ou vários, dependendo do nÃvel de filtragem desejado. Como tenho clientes com banco de dados com mais de 40 mil registros de produtos cadastrados, a filtragem fica lenta quando poucos caracteres
Uso o Sql Server 2008 como Banco de Dados
Resolvi o problema criando uma thread que roda em segundo plano e que vai montando a lista ao passo que o usuário vai digitando, que resolveu parcialmente o meu problema
Preciso ver se alguém conhece um modo de abortar uma consulta bo Banco de Dados, antes dela retornar um resultado
Exemplo: o usuário digita o M e imediatamente inicia a consulta ao Banco. Em seguida ele digita o A e a minha thread ainda está consultado o M. Como o texto é MA e não M, gostaria de abortar a consulta ao caracter M no BD e passar a consultar MA e assim sucessivamente
Segue um exemplo de como uso
Dim St as string = [ô]M[ô]
Using ConDB as sqlconnection = new sqlconnection(Minha Conexão)
ConDB.Open
Using RstCmd as sqlcommand = new sqlcommand([Ô]Select Codigo, Nome, UN, Preco from Produtos where Nome Like [ô][Ô] & st & [Ô]%[ô] order by Nome[Ô],Condb)
Using Rst as SqlDataReader = RstCmd.ExecuteReader [ô]Aqui o Sistema está consultando o Banco de Dados e nesse meio tempo o usuário já dÃgitou A e a consulta
[ô]ainda não terminou. Gostaria de abandonála e reiniciar consultando [ô]MA[ô] e assim sucessivamente
[ô]Aqui uso os dados retornados
End Using
end Using
End Using
Gratos se alguém puder me ajudar
Preciso ver se alguém pode me ajudar
Tenho um formulário de consultas a banco de dados que, a medida em que vou digitando, aparecem todos os produtos cujo nome iniciem, ou contenham os caracteres desejados.
Acontece que muitas vezes os clientes digitam um único caracter ou vários, dependendo do nÃvel de filtragem desejado. Como tenho clientes com banco de dados com mais de 40 mil registros de produtos cadastrados, a filtragem fica lenta quando poucos caracteres
Uso o Sql Server 2008 como Banco de Dados
Resolvi o problema criando uma thread que roda em segundo plano e que vai montando a lista ao passo que o usuário vai digitando, que resolveu parcialmente o meu problema
Preciso ver se alguém conhece um modo de abortar uma consulta bo Banco de Dados, antes dela retornar um resultado
Exemplo: o usuário digita o M e imediatamente inicia a consulta ao Banco. Em seguida ele digita o A e a minha thread ainda está consultado o M. Como o texto é MA e não M, gostaria de abortar a consulta ao caracter M no BD e passar a consultar MA e assim sucessivamente
Segue um exemplo de como uso
Dim St as string = [ô]M[ô]
Using ConDB as sqlconnection = new sqlconnection(Minha Conexão)
ConDB.Open
Using RstCmd as sqlcommand = new sqlcommand([Ô]Select Codigo, Nome, UN, Preco from Produtos where Nome Like [ô][Ô] & st & [Ô]%[ô] order by Nome[Ô],Condb)
Using Rst as SqlDataReader = RstCmd.ExecuteReader [ô]Aqui o Sistema está consultando o Banco de Dados e nesse meio tempo o usuário já dÃgitou A e a consulta
[ô]ainda não terminou. Gostaria de abandonála e reiniciar consultando [ô]MA[ô] e assim sucessivamente
[ô]Aqui uso os dados retornados
End Using
end Using
End Using
Gratos se alguém puder me ajudar
Friamente, Qual a necessidade do usuário digitar um único caracter em um banco de 40 gb ?
Então eu fiz o seguinte em um caso semelhante, a consulta só inicia a partir do 3 caracter digitado, ajuda muito.
Pode não resolver seu caso, mas vai a dica.
Então eu fiz o seguinte em um caso semelhante, a consulta só inicia a partir do 3 caracter digitado, ajuda muito.
Pode não resolver seu caso, mas vai a dica.
Você pode diminuir a quantidade de registro que vem nas consultas usando [Ô]TOP[Ô]
Ex: Select Top 10 * from Tabela
Ex: Select Top 10 * from Tabela
no textchange pq não aborta a thread? e reinicia então
fora as 2 sugestões passadas q combinadas imagino serem perfeitas....
fora as 2 sugestões passadas q combinadas imagino serem perfeitas....
O maior erro da maioria é pensar que o uso de uma thread vai resolver. Na maioria dos casos, não vai, principalmente no seu. A consulta ao banco, após disparada, não vai parar. Você pode até parar a thread mas a consulta vai estar sendo executada. Como seu banco de dados é SQL Server, dependendo da versão(2012 ou mais novo), você pode definir o offset:
Notas:
Se você for usar o offset, a cláusula ORDER BY deve ser especificada
Offset não pode ser combinado com TOP
Se seu banco for anterior ao 2012 então a sua saÃda é usar o TOP
SELECT * FROM Tabela ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
Notas:
Se você for usar o offset, a cláusula ORDER BY deve ser especificada
Offset não pode ser combinado com TOP
Se seu banco for anterior ao 2012 então a sua saÃda é usar o TOP
Realmente.... Eu abortei a thread e a consulta ao Banco de Dados não parou
Pensei que pudesse haver algum modo de abortar a consulta
Agradeço as dicas e vou ver testar as sugestões aqui para ver o que me retorna a melhor performance
Agradeço a ajuda
Pensei que pudesse haver algum modo de abortar a consulta
Agradeço as dicas e vou ver testar as sugestões aqui para ver o que me retorna a melhor performance
Agradeço a ajuda
PQ vc não dispara a consulta somente quando o cara digitar ENTER ?
e se vc precisa de todos esses reigistros sendo filtrados a todo tempo, eu carregaria numa datatable a tabela e faria filtros, bem mais rápido.
enfim, cada caso é um caso.
e se vc precisa de todos esses reigistros sendo filtrados a todo tempo, eu carregaria numa datatable a tabela e faria filtros, bem mais rápido.
enfim, cada caso é um caso.
Eu utilizo uma combinação do que os amigos postaram.
No meu caso eu inicio a busca a partir do 3º caracter e tabelas que não contenham tantos registros(clientes, categorias, etc).
Para produtos eu utilizo um datatable e o usuário digita o termo e pressiona ENTER.
No meu caso eu inicio a busca a partir do 3º caracter e tabelas que não contenham tantos registros(clientes, categorias, etc).
Para produtos eu utilizo um datatable e o usuário digita o termo e pressiona ENTER.
Amigos. Resolvi meu problema da seguinte maneira:
Defini um limite de 500 registros para a consulta e o sistema ficou bem rápido...
Analisando, percebi que nenhum usuário rola uma tela com tantos registros para encontrar o desejado. nesse caso ele acaba digitando mais caracteres....
Ficou bem legal... isso que clientes meus fazem acesso remoto ao banco via internet
agradeço a ajuda de todos
Defini um limite de 500 registros para a consulta e o sistema ficou bem rápido...
Analisando, percebi que nenhum usuário rola uma tela com tantos registros para encontrar o desejado. nesse caso ele acaba digitando mais caracteres....
Ficou bem legal... isso que clientes meus fazem acesso remoto ao banco via internet
agradeço a ajuda de todos
Tópico encerrado , respostas não são mais permitidas