SELECT COM BETWEEN E 2 CAMPOS - JA TENTEI DE TUDO

JAIRORCI 24/06/2010 00:22:27
#345639
Boa noite pessoal.
Ja fiz um monte de dicas mas não consegui.
é o seguinte..
Tenho dois campos.. [Ô]DataVencimento[Ô] tipo date e [Ô]Situacao[Ô] tipo text.
Eu preciso efetuar um select que me retorne todos os registros entre duas datas (inicial e final) e quando a situacao for igual a [Ô]pendente[Ô]
Fiz o seguinte select e funciona normalmente, mas sem o campo Situacao = [Ô]Pendente[Ô]:
[Ô]Dim cmd As New OleDb.OleDbCommand(([Ô]SELECT * FROM Pagar WHERE datavencimento Between #[Ô] + dtpInicio.Value.ToShortDateString() + [Ô]# And #[Ô] + dtpFim.Value.ToShortDateString() +1 + [Ô]# ORDER BY datavencimento[Ô]), conexaoBD)[Ô]
Mas quando coloco o campo Situacao = [Ô]Pendente[Ô], hora da erro, hora diz que tem algum valor/campo faltando e etc.

Por favor.. me ajudem
LLAIA 24/06/2010 09:10:29
#345655
Resposta escolhida
cara, não sei se estou errado pois ainda não peguei firme no .net, mas parece que o operador + usado pra concatenar e somar 1 à data tá dando problema na sua string. Na concatenação substitua o + por &


tente aí
JAIRORCI 24/06/2010 09:50:13
#345662
Obrigado Leandro..
Pode desconsiderar este +1 retirando ele.
Com este select ele funciona, mas não estou conseguindo incluir mais uma condição que seria [Ô]Situacao = 'Pendente'[Ô].
Quando coloco mais esta condição, ele não me retorna nada ou diz que algum campo não tem valor nenhum.
Resumindo.. eu preciso de um select que me retorna todos os registros entre duas datas quando o campo Condicao = [Ô]Pendente[Ô].
Se tiver alguma ideia agradeço.
LUIS.HERRERA 24/06/2010 10:05:45
#345668
Jairo o Leandro está correto, pelo que já li no .Net no VB, diz para usar & para concatenar, só usar o + para cálculos. Ele pode dar erros em determinadas situações, mesmo aparentemente funcionando em outras.

Sobre sua setença, pode ser:

A cláusula Where mal formulada. Procure separar as partes com ( ) fica bem mais legível e ajuda o interpretador (você a achar problemas).
Não sei mas esse AND tá correto com seu banco?
Por último veja na tabela se o campo não está com dados inconsistentes, pois se diz que não tem valor, pode estar aí o erro
O tipo do campo não ser string
O nome do campo estar escrito errado (inclusive caixa alta e baixa) já tive muitos erros assim que dificulta identificar.
LLAIA 24/06/2010 10:06:41
#345669
Estou achando que vc está usando Access, então tente assim:

SELECT * FROM Pagar WHERE (datavencimento Between #[Ô] + dtpInicio.Value.ToShortDateString() + [Ô]# And #[Ô] + dtpFim.Value.ToShortDateString() + [Ô]#) AND Situacao= [ô]Pendente[ô] ORDER BY datavencimento

não se esqueça de informar qual é o seu banco de dados.
KILLER 24/06/2010 16:40:54
#345713
Amigo tente assim:

Dim cmd As New OleDb.OleDbCommand(([Ô]SELECT * FROM Pagar WHERE datavencimento Between #[Ô] & dtpInicio.Value.ToShortDateString() & [Ô]# And #[Ô] & dtpFim.Value.ToShortDateString() + 1 & [Ô]# And Situacao = [ô]Pendente[ô] ORDER BY datavencimento[Ô]), conexaoBD)

se não der poste o erro
RXGOMES 24/06/2010 17:02:36
#345715
Faça como o Luis falou

assim

Dim cmd As New OleDb.OleDbCommand(([Ô]SELECT * FROM Pagar WHERE (datavencimento Between #[Ô] & dtpInicio.Value.ToShortDateString() & [Ô]# And #[Ô] & dtpFim.Value.ToShortDateString() + 1 & [Ô]#) And Situacao = [ô]Pendente[ô] ORDER BY datavencimento[Ô]), conexaoBD)

Repare que a condição datavencimento está explicitamente separada da situção
JAIRORCI 24/06/2010 23:20:40
#345748
Muito obrigado pessoal
Quase deu certo.
Estou anexando a tela com o resultado.
Aparece alguns registros todos com situação pendente, mas a data não esta dentro da faixa especificada datainicio e datafim.
Ah.. quanto a somar 1 dia na datafim, fiz da seguinte maneira.
Dim data1 As DateTime = dtpFim.Value
data1 = data1.AddDays(+1)
data1 = data1.ToShortDateString
E no lugar da dtpfim no Select, coloquei data1 o que me retorna o select aparentemente correto conforme da para ver na textbox.
Estou usando um BD do Access
JAIRORCI 24/06/2010 23:50:15
#345749
Pessoal
fiz mais alguns testes e reparei o seguinte.
Como exemplo, eu coloquei na datainicio e fim como 06/03/2010.. e na listview apareceu todos os registros do mes 6 com situação pendente.
Pelo que entendi, este select, considera o 06 e filtra por ele.
Alguma ideia?
SAMUKA 25/06/2010 08:17:14
#345757
O problema é o formato da data. A algumas semanas um outro usuário teve o mesmo problema.

O formato para instruções SQL é o Americano !!

Você precisa converter o formato de dd/MM/yyyy para MM/dd/yyyy

Exemplo: 01/06/2010 vira 06/01/2010
JAIRORCI 25/06/2010 19:18:39
#345824
Vixi...
Então terei que alterar todo meu código onde trabalha com data!?
Não tem modo de fazer esse select no padrão Brasileiro?


Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas