CONSULTA ENTRE DATAS

PERCIFILHO 17/01/2012 15:46:19
#393474
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.
KERPLUNK 17/01/2012 16:06:04
#393475
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.
PERCIFILHO 18/01/2012 12:19:25
#393543
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.
KERPLUNK 18/01/2012 12:23:26
#393544
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...
PERCIFILHO 18/01/2012 12:29:08
#393545
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.
NICKOSOFT 18/01/2012 13:29:44
#393553
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
GUIMORAES 18/01/2012 13:48:34
#393561
Resposta escolhida
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)

PERCIFILHO 18/01/2012 16:11:44
#393572
Ok, vou tentar. Obrigado.

Até mais.
PERCIFILHO 19/01/2012 13:04:22
#393645
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.
Tópico encerrado , respostas não são mais permitidas