CONSULTA ENTRE DATAS
Boa tarde amigos, estou fazendo a seguinte consulta no BD SqlServer:
cmd = New SqlCommand([Ô]Select * From [Ô] & Tabela & [Ô] Where data Between Convert(date,[ô][Ô] & TxtDataInicial.Text & [Ô][ô]) And Convert(date,[ô][Ô] & TxtDataFinal.Text & [Ô][ô]) Order by Convert(date, data) Asc[Ô], conexao)
Depois mostro o registro num DataGridView:
Dim data As String = drreclamacao.Item([Ô]data[Ô])
Dgv.Rows.Add(sequencia, data, cliente)
Como podem notar, é uma consulta entre duas datas. O problema é que em minha máquina, que é onde eu desenvolvo o sistema, funciona a consulta, porém nas outras máquinas não funciona. Ocorre o seguinte erro:
Conversion failed when converting date and/or time from character string.
Detalhe: No BD o campo data está gravado como varchar(10).
Tentei alterar o comando para Convert(varchar...., mas deu o mesmo erro.
Entrei nas configurações das máquinas e o formato de data também está igual ao da minha.
Alguém poderia me dizer como faço para contornar esse problema?
Até mais.
cmd = New SqlCommand([Ô]Select * From [Ô] & Tabela & [Ô] Where data Between Convert(date,[ô][Ô] & TxtDataInicial.Text & [Ô][ô]) And Convert(date,[ô][Ô] & TxtDataFinal.Text & [Ô][ô]) Order by Convert(date, data) Asc[Ô], conexao)
Depois mostro o registro num DataGridView:
Dim data As String = drreclamacao.Item([Ô]data[Ô])
Dgv.Rows.Add(sequencia, data, cliente)
Como podem notar, é uma consulta entre duas datas. O problema é que em minha máquina, que é onde eu desenvolvo o sistema, funciona a consulta, porém nas outras máquinas não funciona. Ocorre o seguinte erro:
Conversion failed when converting date and/or time from character string.
Detalhe: No BD o campo data está gravado como varchar(10).
Tentei alterar o comando para Convert(varchar...., mas deu o mesmo erro.
Entrei nas configurações das máquinas e o formato de data também está igual ao da minha.
Alguém poderia me dizer como faço para contornar esse problema?
Até mais.
O problema não é o formato de data dos clientes, mas sim do tipo de dados do campo. Como é string, pode conter qualquer coisa que possivelmente não seja conversÃvel para datetime. Vai ter que fazer um datamining nessa tabela verificando os dados dos campos.
Caro colega, não entendi o que quis dizer, estou em dúvida, e se eu alterar os campos no BD para DateTime, resolve?
E se, por acaso, houver casos de em algum formulário ter que gravar o campo data nulo, eu posso?
Desculpe, mas poderia me esclarecer melhor?
Até mais.
E se, por acaso, houver casos de em algum formulário ter que gravar o campo data nulo, eu posso?
Desculpe, mas poderia me esclarecer melhor?
Até mais.
O campo na sua tabela é string, portanto, pode conter algum valor que não é data. A função [Ô]convert[Ô] que vc está usando na sua query, vai pegar todos os valores de dentro da tabela e converter para data. Digamos que em alguma linha, no campo data, contenha algo do tipo [Ô]carrinho de pipoca[Ô]. é um valor que não pode ser convertido para data, portanto a função vai falhar e lançar o erro que vc postou. Verifique isso...
Não, no campo da tabela só tem valores do tipo: 23/12/2011.
No SqlServer, se eu for no modo de edição do campo e digitar a data 23/12/2011 ele automaticamente altera para 2011-12-23.
E se eu fizer a consulta conforme já disse, na TextBox vai ser digitado: 23/12/2011 a 23/12/2011.
Na minha máquina dá certo a consulta, porém nas outras máquinas ocorre o erro descrito acima.
Como perguntei antes, será que alterar o tipo do campo na tabela seria a solução?
E se alterar para campo DateTime e houver alguma data nula, vai ocorrer um erro na execução do projeto?
Só falta esse detalhe para acertar o formulário de consulta.
Até mais.
No SqlServer, se eu for no modo de edição do campo e digitar a data 23/12/2011 ele automaticamente altera para 2011-12-23.
E se eu fizer a consulta conforme já disse, na TextBox vai ser digitado: 23/12/2011 a 23/12/2011.
Na minha máquina dá certo a consulta, porém nas outras máquinas ocorre o erro descrito acima.
Como perguntei antes, será que alterar o tipo do campo na tabela seria a solução?
E se alterar para campo DateTime e houver alguma data nula, vai ocorrer um erro na execução do projeto?
Só falta esse detalhe para acertar o formulário de consulta.
Até mais.
um remendo q sempre uso qnd trabalho com campos de data e preciso dessas buscas, eu o faco em string e armazeno ano mes dia, vira um inteiro, facil ordenar, determinar intervalo
Altera no banco de dados para DateTime, pois em varchar ficará dificil.
Quanto à data ser nula, trate este erro, para que quando nula, pelo menos insira a data do dia.
Apos isto, utilize.
cmd = New SqlCommand([Ô]Select * From [Ô] & Tabela & [Ô] Where data >= [ô][Ô] & format(cdate(TxtDataInicial.text), [Ô]yyyy-MM-dd[Ô]) & [Ô][ô] And data <= [ô][Ô] & format(cdate(TxtDataFinal.text), [Ô]yyyy-MM-dd[Ô]) & [Ô][ô] Order by data Asc[Ô], conexao)
Quanto à data ser nula, trate este erro, para que quando nula, pelo menos insira a data do dia.
Apos isto, utilize.
cmd = New SqlCommand([Ô]Select * From [Ô] & Tabela & [Ô] Where data >= [ô][Ô] & format(cdate(TxtDataInicial.text), [Ô]yyyy-MM-dd[Ô]) & [Ô][ô] And data <= [ô][Ô] & format(cdate(TxtDataFinal.text), [Ô]yyyy-MM-dd[Ô]) & [Ô][ô] Order by data Asc[Ô], conexao)
Ok, vou tentar. Obrigado.
Até mais.
Até mais.
Valeu GUIMORAES, é exatamente isso. Alterei os campos das tabelas para DATE e modifiquei a consulta da maneira que você descreveu.
Muito obrigado. Salvou meu dia, colega.
Até mais.
Muito obrigado. Salvou meu dia, colega.
Até mais.
Tópico encerrado , respostas não são mais permitidas