BUSCA NO ACESS NAO PEGA TODOS OS REGISTROS
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?
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")
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)
vou experimentar retirar algumas coisas pra ver
mas a aplicacao nao é pra rede, é stand alone, e nada muito complicado
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
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"
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
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