jfaguiar Posted April 23, 2018 Report Share Posted April 23, 2018 Boa tarde amigos. Tenho uma tabela que com o nome "ARQFUNC", cujos índices são primeiro VENDCOD e segundo VENDNOME. O campo VENDNOME possui 50 caractere, mas se eu criar uma string de 30 posições e digitar nela parte de um nome o sistema está encontrando, mesmo com set softseek desabilitado (off)!!! Fiz o exemplo abaixo e foi isso que aconteceu isso! Alguém alguém saberia me informar o que está acontecendo nesta tabela ? FUNCTION TestPesqfunc() IF NETUSE("ARQFUNC","ARQFUNC",.T.,.F.,20) OrdListAdd("ARQFUNC") DbSetOrder(2) SET SOFTSEEK OFF ? INDEXKEY() ? LEN(VENDNOME) // cNOMFUNC := "BRUNO GUTTIERREZ FERNANDES" SEEK cNOMFUNC IF EOF() ? "nÃO ENCONTREI" ENDIF BROWSE() close database ENDIF RETURN Nil **************************************************************************** Obrigado Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 23, 2018 Report Share Posted April 23, 2018 cNOMFUNC := "BRUNO GUTTIERREZ FERNANDES" SEEK ALLTRIM( cNOMFUNC ) IF FOUND() // NADA A FAZER ELSE ? "nÃO ENCONTREI. VERIFIQUE BD E O INDICE CORRETO" ENDIF Quote Link to comment Share on other sites More sharing options...
vagner Posted April 23, 2018 Report Share Posted April 23, 2018 Com certeza irá encontrar, pois a string de pesquisa é menor ou igual a string onde está indexado, para que não encontre, coloque espaços no final da string cNome := Left(cNome+Space(50),50) Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted April 24, 2018 Report Share Posted April 24, 2018 Poder ser alias, coloque antes do seek a função select("nomedoaliasdbf") Quote Link to comment Share on other sites More sharing options...
emotta Posted April 25, 2018 Report Share Posted April 25, 2018 Boa tarde amigos. Tenho uma tabela que com o nome "ARQFUNC", cujos índices são primeiro VENDCOD e segundo VENDNOME. O campo VENDNOME possui 50 caractere, mas se eu criar uma string de 30 posições e digitar nela parte de um nome o sistema está encontrando, mesmo com set softseek desabilitado (off)!!! Fiz o exemplo abaixo e foi isso que aconteceu isso! Alguém alguém saberia me informar o que está acontecendo nesta tabela ? FUNCTION TestPesqfunc() IF NETUSE("ARQFUNC","ARQFUNC",.T.,.F.,20) OrdListAdd("ARQFUNC") DbSetOrder(2) SET SOFTSEEK OFF ? INDEXKEY() ? LEN(VENDNOME) // cNOMFUNC := "BRUNO GUTTIERREZ FERNANDES" SEEK cNOMFUNC IF EOF() ? "nÃO ENCONTREI" ENDIF BROWSE() close database ENDIF RETURN Nil **************************************************************************** Obrigado Esse é o comportamento padrão, desde a época do CLIPPER... Exemplo: Imagine uma tabela de clientes com o indice 2 sendo NOME campo CARACTER de tamanho 50 e contem um cliente chamado "JOSE DA SILVA" cNome := "JOSE" DbSelectArea("CLI") DbSetOrder(2) lRet := DbSeek(cNome) // aqui vai retornar .T. cNome := "JOSE" cNome := PadR(cNome,50) DbSelectArea("CLI") DbSetOrder(2) lRet := DbSeek(cNome) // aqui vai retornar .F. Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted April 30, 2018 Author Report Share Posted April 30, 2018 Obrigado amigos. Me deparei com o problema quando um técnico em um cliente criou uma tabela em minha base de dados, onde havia o nome do funcionário com 30 posições Eu sinceramente mexendo com dbf ha tanto tempo, não sabia que isso ocorria. Vou orientá-lo a alterar o tamanho do campo para 50, de modo que fique do mesmo tamanho do que está no cadastro funcionários. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.