como cancelar um locate
Moderador: Moderadores
como cancelar um locate
olá pessoal, gostaria de saber como faço para cancelar um locate no clipper 5.2, tenho um arquivo com muitos registros, e quando, o locate não localiza nenhum registro que satisfaça a condição, o processamento demora para ser finalizado até o final do arquivo, então quero cancelar a consulta, estou fazendo o locate da seguinte forma:
LOCATE FOR ALLTRIM(variavel) $ NCLIENTE
obrigado.
LOCATE FOR ALLTRIM(variavel) $ NCLIENTE
obrigado.
- Jairo Maia
- Moderador
- Mensagens: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
como cancelar um locate
Olá porter,
Você pode usar a cláusula While e estabelecer uma condição para encerrar. Por exemplo:
Você pode usar a cláusula While e estabelecer uma condição para encerrar. Por exemplo:
Código: Selecionar todos
LOCATE FOR ALLTRIM(variavel) $ NCLIENTE While LastKey() != K_ESCAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
como cancelar um locate
Além de seguir a proposição do Jairo Maia, que também seria a minha primeira sugestão, ou seja, acrescentar uma condição lógica, tipo varredura de teclado, pois o sistema sempre fica pesquisando para ver se alguma tecla foi pressionada, e, assim, se você teclar a tecla <ESC> e havendo essa condição no seu comando, o processamento deve ser interrompido.
Quando os arquivos são muito grandes o comando LOCATE não é apropriado, sendo indicado a procura por meio de índices e o uso de SET SOFTSEEK ON e
SET SOFTSEEK OFF cuja localização é super rápida.
Quando os arquivos são muito grandes o comando LOCATE não é apropriado, sendo indicado a procura por meio de índices e o uso de SET SOFTSEEK ON e
SET SOFTSEEK OFF cuja localização é super rápida.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
como cancelar um locate
mas eu estou teclando Esc e não acontece nada, continua processando o locate, e o meu Set Escape está true, estou fazendo assim:
locate for alltrim(variavel) $ ncliente while lastkey() <> 27
locate for alltrim(variavel) $ ncliente while lastkey() <> 27
- Jairo Maia
- Moderador
- Mensagens: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
como cancelar um locate
Porter, troque então o LastKey() por Inkey(), ficando assim:
locate for alltrim(variavel) $ ncliente while Inkey() <> 27
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- JoséQuintas
- Administrador

- Mensagens: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
como cancelar um locate
Nessas horas um gráfico pode ajudar a não ter a sensação de que travou.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
como cancelar um locate
bom dia, mais um detalhe, como faço para mostrar os registros processados pelo locate ?
- Jairo Maia
- Moderador
- Mensagens: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
como cancelar um locate
Porter, acho que você foi claro, e é muito simples isso. Porém, penso que pode estar embutido ai uma outra questão que seria você querer apresentar o registro que atende a condição, e o usuário escolher se é aquele ou pesquisar o próximo. Por exemplo, se você pede para buscar os clientes que tenham JOAO, ele para no primeiro cliente que tenha JOAO, mas você quer ver o próximo cliente por exemplo. Pergunto porque são formas diferentes de sugerir.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
como cancelar um locate
olá Jairo, sei que o locate percorre registro por registro, eu gostaria de mostrar alguma informação referente o registro atual, porque quando acontece do locate não encontrar nada, o usuário acha que o sistema está travado, entendeu, então se mostrar o numero do registro ou o nome do cliente, o usuário perceberá que o processo está em andamento.
obrigado.
obrigado.
- Jairo Maia
- Moderador
- Mensagens: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
como cancelar um locate
Olá Porter,
Uma forma bem simples, mas acho que dá para você ter uma ideia de como fazer com os recursos de seu sistema:
Uma forma bem simples, mas acho que dá para você ter uma ideia de como fazer com os recursos de seu sistema:
Código: Selecionar todos
nQualOrdem := DbSetOrder( 0 ) // deixa area desindexada, para apresentar registros em sequencia
nCursor := SetCursor( 0 ) // tira cursor da tela
cTela := SaveScreen( 0, 0, MaxRow(), MaxCol() )
cTotalRegs := LTrim( Str( Recc() ) )
nLin := ( MaxRow() / 2 ) - 2
nCol := ( MaxCol() - 40 ) / 2
SetColor( "GR+/N" )
@ nLin+1, nCol Say Space( 40 ) // limpa a linha da mensagem
DispBox( nLin, nCol, nLin+2, nCol+40 )
nLin += 1 // ajusta para a função MostraMsg()
nCol += 2
Locate For AllTrim(variavel) $ ncliente While MostraMsg()
SetCursor( nCursor ) // Volta estado anterior do cursor
DbSetOrder( nQualOrdem ) // restabele a ordem anterior
RestScreen( 0, 0, MaxRow(), MaxCol(), cTela ) // volta tela
/*
Exibe registro que está sendo pesquisado
*/
Func MostraMsg()
If Inkey() = 27
Return .f.
EndIf
@ nLin, nCol Say "Processando Registro => " + LTrim( Str( Recn() ) ) + " de " + cTotalRegs
Return .t.Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)

