INTERROMPER CONSULTA
Ola a todos. Por acaso alguém já fez alguma rotina ou conhece algum comando que possa parar uma consulta SQL no meio do processo?
Por exemplo, utilizo SQL Server 2000 em um de meus sistemas e as vezes o usuário clica no botão pesquisar sem utilizar nenhum recurso dos filtros que existem na tela, com isso o grid começa a ser preenchido com todas informações que estão no banco e dependendo dos dados demora muito essa consulta.
Gostaria de saber um jeito de para-la, tipo o usuário tecla ESC e a consulta para ou então clica em um botão <parar consulta> para interromper a mesma.
Obrigado, valeu.
Por exemplo, utilizo SQL Server 2000 em um de meus sistemas e as vezes o usuário clica no botão pesquisar sem utilizar nenhum recurso dos filtros que existem na tela, com isso o grid começa a ser preenchido com todas informações que estão no banco e dependendo dos dados demora muito essa consulta.
Gostaria de saber um jeito de para-la, tipo o usuário tecla ESC e a consulta para ou então clica em um botão <parar consulta> para interromper a mesma.
Obrigado, valeu.
Eu particularmente desconheço
Mas por que você não delimita a sua consulta tipo quantidade máxima de linhas a serem exibidas inicialmente e caso a pessoa queira exibir mais informações a mesma pode utilizar a opção de pesquisa no sistema
Mas por que você não delimita a sua consulta tipo quantidade máxima de linhas a serem exibidas inicialmente e caso a pessoa queira exibir mais informações a mesma pode utilizar a opção de pesquisa no sistema
Olá FILMAN, obrigado pelo retorno,,, Eu inicialmente tinha pensado nisso mesmo. Se pesquisar sem nenhum filtro o sistema abre os 100 primeiros e pergunta se o usuário deseja continuar o restante da pesquisa ou não. Se selecionar sim ele continua se selecionar não para a pesquisa... algo desse tipo.
o que eu pensei é assim
[Ô]SELECT TOP(100) CODIGO, NOME FROM CLIENTES ORDER BY CODIGO[Ô]
e preenche o Grid ou List, mas caso o cliente não encontre o que esta procurado logo abaixo ou acima um TextBox para digitar o que esta procurando e ao pressionar o ENTER o SELECT MUDA para
[Ô]SELECT CODIGO, NOME FROM CLIENTES WHERE NOME LIKE [ô]%[Ô] & TextBoxBusca.Text & [Ô]%[ô] ORDER BY CODIGO[Ô]
Mas caso o usuário não digitar nada no Text e pressionar o ENTER o sistema faz a primeira QUERY novamente carregando os 100 primeiros registros.
UMA DICA caso queira trazer os 100 últimos cadastrados faça o seguinte SQL
[Ô]SELECT TOP(100) CODIGO, NOME FROM CLIENTES ORDER BY CODIGO DESC[Ô]
Quaquer duvida poste ai que estamos dispostos a ajudar
[Ô]SELECT TOP(100) CODIGO, NOME FROM CLIENTES ORDER BY CODIGO[Ô]
e preenche o Grid ou List, mas caso o cliente não encontre o que esta procurado logo abaixo ou acima um TextBox para digitar o que esta procurando e ao pressionar o ENTER o SELECT MUDA para
[Ô]SELECT CODIGO, NOME FROM CLIENTES WHERE NOME LIKE [ô]%[Ô] & TextBoxBusca.Text & [Ô]%[ô] ORDER BY CODIGO[Ô]
Mas caso o usuário não digitar nada no Text e pressionar o ENTER o sistema faz a primeira QUERY novamente carregando os 100 primeiros registros.
UMA DICA caso queira trazer os 100 últimos cadastrados faça o seguinte SQL
[Ô]SELECT TOP(100) CODIGO, NOME FROM CLIENTES ORDER BY CODIGO DESC[Ô]
Quaquer duvida poste ai que estamos dispostos a ajudar
colega seu problema esta relacionado a paginação, pesquise [Ô]como usar paginação no sqlserver[Ô] e terá alguns exemplos interessantes.
posso dar uma opinião?
vc pode em primeiro lugar melhorar a versão do bd;
versões mais atuais do sql server vão te trazer recursos para monitorar teus sqls mais pesados e lentos;
verificar se estão bem criados teus Ãndices;
Ãndices de chaves simples de preferencia com valores numéricos ajudam o desempenho e de chaves compostas sempre respeitar a ordem de que os campos tem maior diversidade de valores primeiro, seguindo dos que tem menor variação;
vc esta usando sql server, um baita banco de dados tche, pense no uso de store procedures e views em seus projetos e tenha um ganho tri legal, hehehe;
abraço ai bagual andpag
vc pode em primeiro lugar melhorar a versão do bd;
versões mais atuais do sql server vão te trazer recursos para monitorar teus sqls mais pesados e lentos;
verificar se estão bem criados teus Ãndices;
Ãndices de chaves simples de preferencia com valores numéricos ajudam o desempenho e de chaves compostas sempre respeitar a ordem de que os campos tem maior diversidade de valores primeiro, seguindo dos que tem menor variação;
vc esta usando sql server, um baita banco de dados tche, pense no uso de store procedures e views em seus projetos e tenha um ganho tri legal, hehehe;
abraço ai bagual andpag
Uso o SQL server 2000 especificamente em apenas alguns clientes, trabalho com procedures, views, o problema é quantidade de registro, nesse caso tem mais de 150 mil e isso complica não só na demora de preencher um mshflexgrid como também até estouro de memoria, é complicado o sistema já tem uns 10 anos de informação nele... por isso vou ter que ir para um esquema como o citado pelo filman... ja tinham me falado dessa solução, outro conhecido que também é analista deixa como obrigatório o operador digitar alguma coisa no filtro, mas acho que essa ideia não é muito legal não... vou fazer a listagem parcial mesmo...
Valeu pelas idéias e abs a todos
Opa pessoal perai,,,, não tinha visto esse esquema de paginação no SQL rsrsrs,,, vou testar no SQL 2000 e ver se da certo... valeu Treze...
ANDPAG,
Não sei como você esta carregando a GRID, mas eu passei por algo parecido e resolvi da seguinte maneira:
Eu tinha um processo que estava em Loop e em determinados casos eu tinha que interromper este Loop, então inclui duas variáveis do tipo Boolean no topo do projeto:
Depois na sub do processo, eu coloquei a variável no começo do Loop, ex:
Depois disso, quando o usuário clicava em pesquisar eu alterava o nome do botão para [Ô]Cancelar[Ô] e se o usuário clicasse no botão novamente, eu setava a variável blnCancelar para True, com isso, toda vez que iniciava o processo no Loop, era verificado se o processo continuaria ou não, ex:
Deu para entender.
Não sei como você esta carregando a GRID, mas eu passei por algo parecido e resolvi da seguinte maneira:
Eu tinha um processo que estava em Loop e em determinados casos eu tinha que interromper este Loop, então inclui duas variáveis do tipo Boolean no topo do projeto:
Private blnCancelar as Boolean
Private blnIniciado as Boolean
Depois na sub do processo, eu coloquei a variável no começo do Loop, ex:
Private sub sTeste ()
....
Loop
If blnCancelar = True then Exit Sub
......
......
End Sub
Depois disso, quando o usuário clicava em pesquisar eu alterava o nome do botão para [Ô]Cancelar[Ô] e se o usuário clicasse no botão novamente, eu setava a variável blnCancelar para True, com isso, toda vez que iniciava o processo no Loop, era verificado se o processo continuaria ou não, ex:
Private sub cmdIniciar()
If blnIniciado = False then
cmdIniciar.Caption = [Ô]Cancelar[Ô]
blnIniciado = True
blnCancelar = False
Call sTeste
Else
blnCancelar = True
blnIniciado = True
cmdIniciar.Caption = [Ô]Iniciar[Ô]
End Sub
Deu para entender.
Ops, faltou alterar a variável de inicio:
Private sub cmdIniciar()
If blnIniciado = False then
cmdIniciar.Caption = [Ô]Cancelar[Ô]
blnIniciado = True
blnCancelar = False
Call sTeste
Else
blnCancelar = True
blnIniciado = False
cmdIniciar.Caption = [Ô]Iniciar[Ô]
End Sub
Tópico encerrado , respostas não são mais permitidas