Locate com índice NTX

01/07/2020

0

E aí pessoal, estou com um problema 😅 estou usando o Halcyon para abrir um dbf com o índice NTX, para fazer um locate, porém o índice está usando 3 campos(USUARIO+SISTEMA+ SUBSISTEMA), e só consigo fazer a pesquisa se eu informar todos os 3 campos no locate, e gostaria de informar somente 2 campos (USUARIO, SISTEMA), para verificar se o usuário possui algum cadastro no sistema informado e assim abrir o programa.
Obrigado.
André

André

Responder

Post mais votado

02/07/2020

não conheço o componente Halcyon, mas o método locate padrão faz a busca nos campos que você indicar, não precisando ter nesta lista os mesmos campos do índice. a sintaxe padrão do locate é:
Locate( Campo, Conteudo, OpcoesDeBusca )
se precisar procurar em mais de um campo, indique-os separados por ponto e vírgula e passe o conteúdo como um array com tantos elementos quantos forem os campos pesquisados.

dentro das opções de busca há duas cláusulas muito utilizadas:
- loPartialKey faz a busca pelo conteúdo parcial do campo e
- loCaseInsensitive ignora se o texto está em maiúsculas ou minúsculas

no teu caso, seria algo assim:
Locate( 'USUARIO;SISTEMA', VarArrayOf([ UsuarioDesejado, SistemaDesejado ]), [loPartialKey] )

se o teu campo comporta 15 caracteres e você gravou 'EMERSON', você pode procurar assim:
Locate( 'USUARIO', 'EMERSON', [loPartialKey] ); // indica que deve fazer a busca parcial ou
Locate( 'USUARIO', 'EMERSON        ', [] ); // não precisa fazer a busca parcial porque foram indicados os 15 caracteres do campo

ou ainda, se não sabe o conteúdo completo de um campo:
Locate( 'USUARIO', 'EMERSON', [loPartialKey] );//posiciona no primeiro registro cujo conteúdo do campo USUARIO inicie por 'EMERSON'
Locate( 'USUARIO;SISTEMA', VarArrayOf(['EMERSON', 'SIST1']), [loPartialKey] );//posiciona no primeiro registro cujo conteúdo do campo USUARIO inicie por 'EMERSON' e o conteúdo do campo SISTEMA inicie por 'SIST1'

você pode adicionar a cláusula loCaseInsentive nas opções de busca pra não precisar se preocupar se o conteúdo foi gravado em maiúsculas ou minúsculas.
Locate( 'USUARIO', 'EMERSON', [loPartialKey, loCaseInsensitive] );
Locate( 'USUARIO;SISTEMA', VarArrayOf(['EMERSON', 'SIST1']), [loPartialKey, loCaseInsensitive] );

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

02/07/2020

André

não conheço o componente Halcyon, mas o método locate padrão faz a busca nos campos que você indicar, não precisando ter nesta lista os mesmos campos do índice. a sintaxe padrão do locate é:
Locate( Campo, Conteudo, OpcoesDeBusca )
se precisar procurar em mais de um campo, indique-os separados por ponto e vírgula e passe o conteúdo como um array com tantos elementos quantos forem os campos pesquisados.

dentro das opções de busca há duas cláusulas muito utilizadas:
- loPartialKey faz a busca pelo conteúdo parcial do campo e
- loCaseInsensitive ignora se o texto está em maiúsculas ou minúsculas

no teu caso, seria algo assim:
Locate( 'USUARIO;SISTEMA', VarArrayOf([ UsuarioDesejado, SistemaDesejado ]), [loPartialKey] )

se o teu campo comporta 15 caracteres e você gravou 'EMERSON', você pode procurar assim:
Locate( 'USUARIO', 'EMERSON', [loPartialKey] ); // indica que deve fazer a busca parcial ou
Locate( 'USUARIO', 'EMERSON        ', [] ); // não precisa fazer a busca parcial porque foram indicados os 15 caracteres do campo

ou ainda, se não sabe o conteúdo completo de um campo:
Locate( 'USUARIO', 'EMERSON', [loPartialKey] );//posiciona no primeiro registro cujo conteúdo do campo USUARIO inicie por 'EMERSON'
Locate( 'USUARIO;SISTEMA', VarArrayOf(['EMERSON', 'SIST1']), [loPartialKey] );//posiciona no primeiro registro cujo conteúdo do campo USUARIO inicie por 'EMERSON' e o conteúdo do campo SISTEMA inicie por 'SIST1'

você pode adicionar a cláusula loCaseInsentive nas opções de busca pra não precisar se preocupar se o conteúdo foi gravado em maiúsculas ou minúsculas.
Locate( 'USUARIO', 'EMERSON', [loPartialKey, loCaseInsensitive] );
Locate( 'USUARIO;SISTEMA', VarArrayOf(['EMERSON', 'SIST1']), [loPartialKey, loCaseInsensitive] );

Muito obrigado, tive que colocar só o loPartialKey, e funcionou, muito obrigado pela ajuda
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar