CONSULTA ENTRE DATAS NO SQL SERVER COMPACT

SANROMAN 25/09/2016 00:01:51
#467439
Boa Noite

Alguém teria algum link para trabalhar com datas em sql server compact 4.0

Estou tentando montar uma consulta para popular um datagridview entre datas distintas, mas dá erro

O código que uso é o seguinte:


Private Sub preencheDgvDesPer()

Using con As SqlCeConnection = conectarDados()

con.Open()

Try
Dim strCom As String = [Ô]SELECT Data, NumDoc, Conta, Favorecido, Valor, Forma, Observacoes, idDespesa [Ô] & _
[Ô]FROM tbDespesa [Ô] & _
[Ô]WHERE Favorecido LIKE [ô]%[Ô] & txtLocalizar.Text & [Ô]%[ô] [Ô] & _
[Ô]AND Data BETWEEN [ô][Ô] & dtpDataInicial.Text & [Ô][ô] AND [ô][Ô] & dtpDataFinal.Text & [Ô][ô] [Ô] & _
[Ô]ORDER BY Data ASC[Ô]

Dim sqlCom As SqlCeCommand = New SqlCeCommand(strCom, con)
Dim da As New SqlCeDataAdapter(sqlCom)
Dim dt As DataTable = New DataTable([Ô]Despesa[Ô])
Dim ds As DataSet = New DataSet
dgvDespesa.Columns.Clear()

da.Fill(ds)

With dgvDespesa

.DefaultCellStyle.Font = New Font([Ô]Arial[Ô], 7, FontStyle.Regular)
.ColumnHeadersDefaultCellStyle.Font = New Font([Ô]Arial[Ô], 8, FontStyle.Regular)
.GridColor = Color.LightGray
.BorderStyle = BorderStyle.Fixed3D
.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.None
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None
.RowHeadersVisible = False
.BackgroundColor = Color.White
.ColumnCount = 8
.AutoGenerateColumns = False
.Columns(0).Name = [Ô]Data[Ô]
.Columns(1).Name = [Ô]Doc[Ô]
.Columns(2).Name = [Ô]Conta[Ô]
.Columns(3).Name = [Ô]Favorecido[Ô]
.Columns(4).Name = [Ô]Valor[Ô]
.Columns(5).Name = [Ô]Forma Pgto[Ô]
.Columns(6).Name = [Ô]Observações[Ô]
.Columns(7).Name = [Ô]ID[Ô]
.Columns(0).Width = 63
.Columns(1).Width = 55
.Columns(2).Width = 70
.Columns(3).Width = 147
.Columns(4).Width = 80
.Columns(5).Width = 100
.Columns(6).Width = 300
.Columns(0).DefaultCellStyle.Format = [Ô]dd/MM/yyyy[Ô]
.Columns(4).DefaultCellStyle.Format = [Ô]N[Ô]
.Columns(7).Visible = False
.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
.Columns(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToOrderColumns = False
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False

End With

dt = ds.Tables(0)

For Each linha As DataRow In dt.Rows
dgvDespesa.Rows.Add(linha(0), linha(1), linha(2), linha(3), linha(4), linha(5), linha(6))
Next

Catch ex As Exception
MsgBox(ex.ToString)
End Try

End Using

End Sub


O erro descrito é o seguinte:

System.data.SqlServerCE..sqlCeExcepection(0x80004005). O tipo de dados não é válido para a operação booliana. [ Data type (if Known) = datetime, Data type (if Known) = nvarchar]

Se alguém puder ajudar, agradeço desde já

DS2T 25/09/2016 12:35:32
#467444
Qual linha que dá o erro?
NICKOSOFT 25/09/2016 13:24:29
#467450
se a coluna no banco é datetime, vc precisa converter os texts para datetime tmb, e no formato do banco....
SANROMAN 25/09/2016 14:06:48
#467453
A linha que dá erro é a seguinte:

Dim sqlCom As SqlCeCommand = New SqlCeCommand(strCom, con)
Dim da As New SqlCeDataAdapter(sqlCom)
Dim dt As DataTable = New DataTable([Ô]Despesa[Ô])
Dim ds As DataSet = New DataSet
dgvDespesa.Columns.Clear()

[txt-color=#e80000]da.Fill(ds)[/txt-color]

Se faço a consulta para verificar entre datas dá erro.
A consulta com: WHERE Favorecido LIKE..... funciona corretamente.

JABA 25/09/2016 21:34:40
#467462
Em vez de aspas simples, tente com tralha ou porcentagem:

AND Data BETWEEN # [Ô] & dtpDataInicial.Text & [Ô] # AND # [Ô] & dtpDataFinal.Text & [Ô] # [Ô] & _


ou então use aspas simples mesmo e converta suas datas para o formato [ô]25-09-2016[ô].
PERCIFILHO 26/09/2016 08:30:46
#467478
Resposta escolhida
Sugestões:
.....
AND Data BETWEEN #[Ô] & Format(CDate(dtpDataInicial.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(CDate(dtpDataFinal.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô]# [Ô] & _
.....

ou
.....
AND Data BETWEEN #[Ô] & Convert.ToDateTime(dtpDataInicial.Text) & [Ô]# AND #[Ô] & Convert.ToDateTime(dtpDataFinal.Text) & [Ô]# [Ô] & _
....

Se o seu controle for um DateTimePicker (que parece que é o seu caso), nunca trabalhei com ele, mas creio que retorne um tipo Date, então neste caso acho que seria só fazer como o Jaba disse, colocar o [Ô]jogo da velha[Ô] antes da data.
SANROMAN 27/09/2016 12:22:17
#467593
Bom dia PERCIFILO

Já tentei com hash, convertendo para data, convertendo para string sei lá mais o quê.
Não acho tutorias nem em fóruns nem no you tube e nem em sites de língua inglesa...

Tenho o mesmo sistema em sql server 2012 e funciona perfeitamente.

já tentei usando format custom para data sql server que grava a data como xx/xx/xxxx 00:00:00

Usando o código como vc o formatou deu o seguinte erro:

System.data.SqlServerCE..sqlCeExcepection(0x80004005):Erro ao analisar a consulta. [ Token line number = 1, Token line offset = 148, Token in error = #
NILSONTRES 27/09/2016 12:36:59
#467594
Se for igual a Mysql, que acho que é, não precisa utilizar BETWEEN, basta Data >= [ô][Ô] & parâmetro & [Ô][ô] And Data <= [ô][Ô] & parâmetro & [Ô][ô]
SANROMAN 27/09/2016 13:30:47
#467595
Pessoal dá o mesmo erro com o exemplo do NILSONTRES e também o mesmo erro com o exemplo do PERCIFILHO.

Erro: System.data.SqlServerCE..sqlCeExcepection(0x80004005):Erro ao analisar a consulta. [ Token line number = 1, Token line offset = 148, Token in error = #

Como usar o server compact 4.0 se para fazer uma simples consulta entre datas e preciso fazer um parto.
PERCIFILHO 27/09/2016 13:33:14
#467596
Colega SanRoman, tenho um sistema em que eu utilizo o Sql CE 4.0, escrito em C# (se for VB.Net ou outra é só converter)

Essa consulta funciona normalmente:

Select * From Banco_de_Dados Where data Between [ô][Ô] + String.Format([Ô]{0:yyyy/MM/dd}[Ô], Convert.ToDateTime(mskDataPrevisaoInicial.Text)) + [Ô][ô] And [ô][Ô] + String.Format([Ô]{0:yyyy/MM/dd}[Ô], Convert.ToDateTime(mskDataPrevisaoFinal.Text)) + [Ô][ô] [Ô];

Note que eu não utilizo o DateTimePicker, mas sim dois MaskedTextBox (inicial e final).
Repito, no meu sistema está funcionando corretamente;
Obs: o campo da minha tabela é tipo DateTime.
SANROMAN 27/09/2016 17:33:14
#467607
Boa tarde, PerciFilho

Eureka.... Valeu meu amigo funcionou perfeitamente. Precisei trocar apenas os nomes dos campos.

Muito obrigado. O ditado está correto: Unidos jamais seremos vencidos... kkkkkkkkk

Vou dar o tópico como encerrado.

Felicidades
Tópico encerrado , respostas não são mais permitidas