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.
Obrigado.
André
Curtir tópico
+ 0
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:
se o teu campo comporta 15 caracteres e você gravou 'EMERSON', você pode procurar assim:
ou ainda, se não sabe o conteúdo completo de um campo:
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( 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
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:
se o teu campo comporta 15 caracteres e você gravou 'EMERSON', você pode procurar assim:
ou ainda, se não sabe o conteúdo completo de um campo:
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( 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
Clique aqui para fazer login e interagir na Comunidade :)