PESQUISA MSFLEXGRID DENTRO DE INTERVALO DE NUMEROS

LEDONEY 31/12/2012 12:29:09
#416584
Ola, bom dia amigos!

Mais uma vez solicito a ajuda dos companheiros aqui do fórum.
Tenho uma FlexGrid na qual faço um(a) filtro/pesquisa por Nome ou por Nº de documento.
A minha dificuldade ocorre porque os números dos documentos referem-se a documentos que se encontram em talões, ou seja, eu não cadastro cada número de documento mas sim o número do primeiro e do último documento que se encontram num determinado talão. Dessa forma o cadastro de um talão para um funcionário ocorre assim:

NOME DO Nº AO Nº
Jose 1000 1049

Nesse exemplo o funcionário Jose é responsável pelo talão que vai do número 1000 ao número 1049 (intervalo 1000 ao 1049).

O que necessito é fazer uma pesquisa/filtro de um determinado número de documento e o programa me dirá a qual intervalo de números ele pertence, ou seja, a qual talão esse número pesquisado pertence.

Já fiz algumas pesquisas mas não consegui compreender como poderia ser a dinâmica de tal pesquisa, se é que ela é possível.

Não sei se fui claro ou repetitivo demais rsrs, enfim, se puderem me ajudar ficarei muito agradecido, pois este é um dos poucos problemas que me resta resolver para eu terminar meu programinha.

Muito obrigado e Feliz Ano Novo!!

PS: Segue anexa minha MSFlexGrid para uma melhor visualização.
GANDA.NICK 31/12/2012 13:36:40
#416587
Resposta escolhida
Olá, veja se isto resolve seu problema


StrSQL = [Ô]SELECT Código, Nome, Do, Ao FROM tbldocumento WHERE Nome Like [ô][Ô] & txtpesquisa & [Ô]%[Ô] & [Ô][ô] OR Do <= [ô][Ô] & txtpesquisa & [Ô][ô] AND Ao >= [ô][Ô] & txtpesquisa & [Ô][ô] ORDER BY Do[Ô]

LEDONEY 31/12/2012 17:16:21
#416593
Ola meu amigo GANDA_NICK!

Mais uma vez você aqui me ajudando...

Muito obrigado!

O código que você postou aqui me ajudou a ter uma idéia da dinâmica do filtro, porém, ao digitar o número do documento [Ô]1002[Ô] o programa exibe a mensagem de [Ô]Registro não encontrado[Ô], então clico no [Ô]OK[Ô] da mensagem e continuo digitando até completar o número [Ô]1002[Ô] e somente ai ele filtra certo, contudo, se continuar digitando além do número [Ô]1002[Ô] por exemplo [Ô]10023[Ô] ele ainda continua me dando o mesmo resultado e não deveria, certo? Tentei descobrir uma forma de impedir essa mensagem e a digitação [ô]extra[ô] mas não consegui. Se os números dos documentos fossem todos com quatro dígitos como no exemplo, resolveria o problema da digitação [ô]extra[ô] limitando a inserção de dígitos na caixa de texto para até quatro dígitos, porém tenho números de documentos com até cinco dígitos, então não poderia resolver dessa forma.

Será que você tem alguma idéia de como contornar esses problemas? Ou outra forma de conseguir fazer essa pesquisa sem ser necessariamente através da MSFlexGrid?

De qualquer forma agradeço muito sua resposta e aguardo qualquer outra ajuda.

Obrigado!
OMAR2011 31/12/2012 22:33:23
#416602
Quanto ao seu código do projeto ele funciona de forma normal.
[txt-color=#e80000][Ô]Registro não encontrado[Ô], então clico no [Ô]OK[Ô] da mensagem e continuo digitando até completar o número [Ô]1002[Ô] e somente ai ele filtra certo, contudo, se continuar digitando além do número [Ô]1002[Ô] por exemplo [Ô]10023[Ô] ele ainda continua me dando o mesmo resultado e não deveria, certo? Tentei descobrir uma forma de impedir essa mensagem e a digitação[/txt-color].
Isto não acontece no seu projeto.Testei e não deu isto.
Quanto ao número de dígitos do documentos não tem nada a ver com quantidade.O que tem haver é se está registrado na tabela.A consulta SQL não limita número de quatro dígitos.
Pode ter documentos de
10 a 50
23 a 62
111 a 51
99956 a 99996
1234859 a 1234899
Modifica alguns registros e coloca com mais números e verás se como fica.

Este número 1002 não existe na sua tabela então vai aparecer a mensagem,isto está correto.

StrSQL = [Ô]SELECT Código, Nome, Do, Ao FROM tbldocumento WHERE Nome Like [Ô] & Criterio & [Ô] OR Do Like [Ô] & Criterio & [Ô] ORDER BY Do[Ô]

Se tiver muitos registros acho melhor o like,caso tenha o número do documento ai sim = [Ô]igual[Ô].

Seu código está correto,VOCÊ QUE ESTÀ ERRADO.Está é a função dele.
Valeu
LEDONEY 01/01/2013 04:26:39
#416603
Agradeço muito a todos que responderam ao tópico, pricipalmente ao amigo GANDA_NICK que até o momento foi quem respondeu da forma mais objetiva possível e quase solucionou todo o problema. Aos demais, informo que toda resposta é bem vinda. Peço apenas que leiam o tópico desde o início para que entendam as dúvidas antes de postarem as [Ô]respostas[Ô], assim a solução será breve. Lembrando que minhas dúvidas podem e provavelmente serão as dúvidas de outros usuários do fórum. Mais uma vez muito obrigado!

Só lembrando:

No meu projeto faço o cadastro de um talão para um funcionário e ocorre dessa forma:

NOME DO Nº AO Nº
Jose 1000 1049

Nesse exemplo o funcionário Jose é responsável pelo talão que vai do número 1000 ao número 1049 (intervalo 1000 ao 1049).

O que necessito é fazer uma pesquisa/filtro de um determinado número de documento e o programa me dirá a qual intervalo de números ele pertence, ou seja, a qual talão esse número pesquisado pertence.

Por exemplo: se eu pesquisar o documento de número [Ô]1002[Ô] o programa me retornará, através do controle MSFlexGrid, o intervalo [Ô]1000 ao 1049[Ô] pois o nº [Ô]1002[Ô] está contido nesse intervalo.

Fazer a pesquisa pelo número que inicia o talão (nesse exemplo o nº 1000) ou pelo nº que finaliza o talão (nesse exemplo o nº 1049) não é difícil, pois os mesmos constam na tabela do access. O problema está em pesquisar os números que estão nesse intervalo (nesse exemplo do nº 1000 ao nº 1049). Até porque quando eu for pesquisar um nº de documento qualquer não saberei se mesmo é o primeiro de um talão, se está no meio do talão ou se é o último do talão.

Será que é possível fazer essa pesquisa através de um filtro no controle MSFlexGrid sem os problemas que eu citei na resposta anterior ou existe outra forma mais eficiente de fazer tal pesquisa?

Obrigado pela atenção de todos!

Feliz Ano Novo!
GANDA.NICK 01/01/2013 12:00:54
#416605

Não tenho o Access instalado, quais são o tipo dos campos de [Ô]Do[Ô] e [Ô]Ao[Ô] ? verifique se são NUMBER ou LONG ou qualquer coisa relacionada com numeros

tente tambem por [Ô]Val [Ô] antes do txtpesquisa

StrSQL = [Ô]SELECT Código, Nome, Do, Ao FROM tbldocumento WHERE Nome Like [ô][Ô] & txtpesquisa & [Ô]%[Ô] & [Ô][ô] OR Do <= [ô][Ô] & Val(txtpesquisa) & [Ô][ô] AND Ao >= [ô][Ô] & Val(txtpesquisa) & [Ô][ô] ORDER BY Do[Ô]
LEDONEY 04/01/2013 09:59:27
#416725
Bom dia meu amigo GANDA_NICK!

Mais uma vez lhe agradeço a grandessíssima ajuda. Desculpe não responder antes. Precisei viajar uns dias ;)
Adaptei o código que você postou aqui e me serviu muito bem.
Muito obrigado!
Grande abraço e até mais
Tópico encerrado , respostas não são mais permitidas