SELECT COM BETWEEN E 2 CAMPOS - JA TENTEI DE TUDO
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
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
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Ã
tente aÃ
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.
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.
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.
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.
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.
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.
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
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
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
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
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
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
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?
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?
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
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
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?
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?
Tópico encerrado , respostas não são mais permitidas