BUSCA NO ACESS NAO PEGA TODOS OS REGISTROS

USUARIO.EXCLUIDOS 08/06/2007 11:25:41
#220327
pessoal to usando a seguinte expressao

Set TB = DB.OpenRecordset("SELECT * FROM nomes where " & Combo1.Text & " between '" & Combo2.Text & "*' and in'" & Combo3.Text & "*' and frequencia_ajuda like 'M' order by " & Combo1.Text & " asc")

to usando isso pra buscar todos os dados da tabela nomes, onde o combo1 define o campo da tabela, tipo nome, fique entre combo2 e 3 eu uso as iniciais do nome da pessoal no caso, tipo Y e Z no combo2 e 3 respectivamente, normal o restante da expressao, so q o problema fica q de varios registros q tem na tabela tanto com Y como com Z, a busca me da o retorno apenas os nomes com Y, ela ignora o ultimo caracter q eu uso de busca se fizer tipo de A a E so vai listar de A a D

alguem sabe como incluir a ultima letra na busca tmb?
USUARIO.EXCLUIDOS 08/06/2007 11:33:47
#220333
pessoal colei errada a expressao, nas tentativas aki, o certo é sem o IN, mas ainda nao funciona

Set TB = DB.OpenRecordset("SELECT * FROM nomes where " & Combo1.Text & " between '" & Combo2.Text & "*' and in'" & Combo3.Text & "*' and frequencia_ajuda like 'M' order by " & Combo1.Text & " asc")
esse in em negrito nao existe o certo q estou usando é como abaixo

Set TB = DB.OpenRecordset("SELECT * FROM nomes where " & Combo1.Text & " between '" & Combo2.Text & "*' and '" & Combo3.Text & "*' and frequencia_ajuda like 'M' order by " & Combo1.Text & " asc")
USUARIO.EXCLUIDOS 08/06/2007 11:47:43
#220342
Vixi nicko, muda o quanto antes de DAO para ADO a tecnologia de acesso a dados.

Batendo o olho ja vejo que o like está errrado.

A clusula LIKE exige que vc especifique para onde deve proceguir

exe1: LIKE '%N'

Encontra:
EmersoN
NelsoN

Não encontra:
JuliaNa
ANtoNia

Exe2: LIKE '%N%'

Encontra:
JuliaNa
ANtoNia


Não Encontra:
Paulo
Pedro


Exe3: LIKE 'N%'

Encontra:
Nelson
Norberto
Nerivaldson (Hehe inventei agora)

Não Encontra:
Emerson
Anderson

Creio que esteja sendo esta sua falha (pelo menos uma é com ctz)
Se for o erro é não retornar nada apenas o que é só M(tenta colocar só m no campo ou então passar o valor inteiro do campo como parametro)
USUARIO.EXCLUIDOS 08/06/2007 12:35:08
#220354
valeu, esse M é definido e fixo no campo ou M para mensal ou A para anual, e como esse codigo esta no mensal eu tenho q usar like M mesmo

vou experimentar retirar algumas coisas pra ver

mas a aplicacao nao é pra rede, é stand alone, e nada muito complicado
USUARIO.EXCLUIDOS 08/06/2007 12:57:37
#220362
nem mesmo dessa forma ele pega os dados da ultima letra definida em combo3

Set TB = DB.OpenRecordset("SELECT * FROM nomes where " & Combo1.Text & " between '" & Combo2.Text & "' and '" & Combo3.Text & "'")

pelo q entendi, o between é uma funcao pra trabalhar com numericos, e no meu caso string, ele esta excluindo a ultima letra da pesquisa, pegando o q comeca com a letra do combo2 e terminando exatamente antes da segunda letra

sera q tem como eu estar modificando pra incluir a ultima letra, tem como fazer parte da busca? to pensando em mandar um FOR bem ninja
USUARIO.EXCLUIDOS 08/06/2007 13:16:39
#220373
Se o M é fixo use '=' ... vai ser mais rápido e LIKE não tem finalidade

Honestamente utilizo between para selecionar entre datas ...

Se eu fosse vc reescreveria o SQL assim :

"SELECT * 
FROM nomes
WHERE nome_campo >='" & Combo1.Text & "'
AND nome_campo <='" & Combo2.Text & "'
AND frequencia_ajuda = 'M'
ORDER BY '" & Combo1.Text & "' ASC"
USUARIO.EXCLUIDOS 08/06/2007 13:50:47
#220383
Emerson valeu essas dicas, esse codigo q postou vou experimentar no codigo Mensal o Anual q eu imaginava ultra super complicado desenvolvi por for mesmo e nao ficou lento, como disse, é aplicacao leve


For letra = Asc(Combo2.Text) To Asc(Combo3.Text)
Set TB = DB.OpenRecordset("SELECT * FROM nomes where frequencia_ajuda like 'A' and nome like '" & Chr(letra) & "*'order by " & Combo1.Text & " asc")
TB.MoveFirst
Do
If TB.EOF = True Then
Exit Do
Else

processei tudo q tinha pra fazer

End If
TB.MoveNext
Loop
Next letra



eu sei q nao é o melhor e mais rapido

entao é isso mesmo Emerson, o between so trabalha corretamente com numero e data pelo jeito, numero nao tenho nem certeza...até os exemplos de codigo q usam between q eu vi so trabalhavam com datas e pouquissimos com numeros
USUARIO.EXCLUIDOS 08/06/2007 14:33:18
#220396
Citação:

NICKOSOFT escreveu:nao funcionou, mas tmb nao deu erro
é q nao consigo explicar...vou tentar....

é um programa pra uma ong, logo é um programa q tem cadastro de pessoas e tem q emitir boleto para as pessoas, eu tenho a tabela, perfeitinha, o cadastro funciona inclusao alteracao, exclusao, busca tudo....

ai esse enrosco apareceu na tela de gerar boletos, devido ao numero ser um pouco grande eu preferi montar a tela q o usuario determina intervalos...
no combo1 seleciona o campo da tabela q quer usar, nome, uf ou o codigo autonumeravel do BD
selecionado nome no combo1, o combo2 seria a letra inicial do intervalo e combo3 a final, tipo de A a Z
ok, maravilha funciona, so q como comentei no forum, a letra q eu coloco como final, no combo3, fica de fora do resultado nas buscas

o codigo do between entende e processa da seguinte forma, comeca com a letra do combo2, faz parte, comeca com a letra do combo3 pra frente ja nao faz parte esta fora do criterio....

por isso desenvolvi o super for na tela de geracao dos boletos anuais com outros lacos dentro, onde ve o mes q estamos e fica preso gerando boleto até o fim do ano, pra poder ir a proxima pessoa, e assim até acabar aquela letra, e volta a um laco q pula a proxima letra e assim vai.....

ah respeito se precisar da fonte e dll pra gerar boleto eu tenho os 2 aki, so preciso ver se na leitura do codigo de barra ja vai passar beleza meus boletos




Amigão o problema está no fato de vc enviar somente valores ao seu SQL e não os campos de comparação

Deixa eu explicar:

Como o BD pode retornar algo se eu enviar a ele o comando:
SELECT * FROM usuario WHERE 'emerson_tadeu'
?

precisamos especificar o campo para a comparação !!!
SELECT * FROM usuario WHERE NOME = 'emerson_tadeu'
!!!!

Isto faz toda a diferença, então reescrevendo meu código ...


"SELECT *
FROM nomes
WHERE " & Combo1.Text & " >= '" & Combo2.Text & "'
AND " & Combo1.Text & " <= '" & Combo3.Text & "'
AND frequencia_ajuda = 'M'
ORDER BY '" & Combo1.Text & "' ASC"


Isto deve trazer do Campo selecionado em Combo1 o Valores entre o Combo2 e Combo3
Tópico encerrado , respostas não são mais permitidas