none
Pesquisa entre duas datas RRS feed

  • Pergunta

  • Olá pessoal preciso fazer uma consulta numa aplicação VB 2010, usando banco de dados access.

    Tenho um datatimerpicker (dtpinicial)

    e um datatimerpicker (dtpFinal).

    Montei este select mas não esta reornando valores corretos, por isso peço ajuda.

    Dim VDATAI As Date = FormatDateTime(dtpI.Value.Date.Date, DateFormat.ShortDate)
                Dim VDATAF As Date = FormatDateTime(DtpF.Value.Date.Date, DateFormat.ShortDate)
                If vfiltro = "COMPLETO" Then
                    selcom.CommandText = "SELECT * FROM Tab_Homicidio  WHERE DATA >= #" & VDATAI & "# and DATA <= #" & VDATAF & "#  order by DATA"
                    MsgBox(selcom.CommandText)

                End if

    segunda-feira, 4 de fevereiro de 2013 19:21

Respostas

  • Seguindo o exemplo do nosso amigo Carlos, 

    no lugar de:

    selcom.CommandText = "SELECT * FROM Tab_Homicidio  WHERE DATA BETWEEN #" & DATAI & "# and  #" & DATAF & "#  order by DATA"

    use:

    selcom.CommandText = "SELECT * FROM Tab_Homicidio  WHERE DATA BETWEEN @dtInit and  @dtfinish order by DATA"


    selcom.parameters.AddParamWithValue("@dtInit",VDATAI)

    selcom.parameters.AddParamWithValue("@dtFinish",VDATAF)

    • Marcado como Resposta SRick quarta-feira, 6 de fevereiro de 2013 14:22
    terça-feira, 5 de fevereiro de 2013 13:31
  • Ok amigo, resolveu meu problema muito obrigado, ficou show de bola.

    Henrique

    • Marcado como Resposta SRick quarta-feira, 6 de fevereiro de 2013 14:22
    terça-feira, 5 de fevereiro de 2013 13:39
  • Olá,

    Poderia marcar a resposta, ou respostas, para ajudar outros usuários do fórum!

    []s,


    Carlos dos Santos
    blog: www.carloscds.net 
    twitter: @cdssoftware

    • Marcado como Resposta SRick terça-feira, 5 de fevereiro de 2013 16:27
    terça-feira, 5 de fevereiro de 2013 13:46

Todas as Respostas

  • você chegou a executar o selcom.ExecuteReader() ?
    segunda-feira, 4 de fevereiro de 2013 20:00
  • Sim, executei, assim:

    Dim vleitor As OleDb.OleDbDataReader
                vleitor = selcom.ExecuteReader()

    terça-feira, 5 de fevereiro de 2013 11:31
  • verifique se os valores de VDATAI e VDATAF são datas no format 'MM/dd/yyyy'

    qualquer coisa tente

    Dim VDATAI as String = dtpI.Value.Date.Date.ToString("MM/dd/yyyy")

    e o mesmo para a data final

    terça-feira, 5 de fevereiro de 2013 12:11
  • Olá,

    O problema de concatenar uma data com string é que a conversão pode ficar incorreta no banco. O melhor a fazer é criar um Parametro na sua string e passar a data, veja:

    Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM Tab_Homicidio  WHERE DATA between @datainicial and @datafinal order by DATA")
            cmd.Parameters.AddWithValue("@datainicial", VDATAI)
            cmd.Parameters.AddWithValue("@datafinal", VDATAF)
    []s,

    Carlos dos Santos
    blog: www.carloscds.net 
    twitter: @cdssoftware

    • Sugerido como Resposta Afonso Fernandes terça-feira, 5 de fevereiro de 2013 13:08
    terça-feira, 5 de fevereiro de 2013 12:56
  • ok AMIGO, VOU ME INSERIR O MEU CÓDIGO COMPLETO E PEÇO AJUDA PARA ME ENSINAR A TRABALHAR COM PARAMETERS.

    VEJA O CODIGO:

    Class Estatistica
        Dim areds(1) As String
        Dim aid(1) As Integer
        Dim adata(1) As Date
        Dim amunicipio(1) As String
        Dim abairro(1) As String
        Dim ameio(1) As String
        Dim aprisao(1) As String
        Dim aautor(1) As String
        Dim avitima(1) As String
        Dim asexov(1) As String
        Dim asexoa(1) As String
        Dim aidadev(1) As String
        Dim aidadea(1) As String
        Dim amotivacao(1) As String
        Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
            Dim vfiltro As String
            vfiltro = cmbFiltro.Text
            Dim cs As String = My.Settings.HomicidioConnectionString
            Dim conect As New OleDb.OleDbConnection
            conect.ConnectionString = cs
            Try
                conect.Open()
                Dim selcom As New OleDb.OleDbCommand
                selcom.Connection = conect
                If CDate(dtpI.Text) > CDate(DtpF.Text) Then
                    MessageBox.Show("A data inicial não pode ser maior que a final", "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    dtpI.Focus()
                    Exit Sub
                End If
                If cmbFiltro.Text = "" Then
                    MessageBox.Show("Escolha um critério no Filtro de pesquisa", "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    cmbFiltro.Focus()
                    Exit Sub
                End If

                Dim VDATAI As Date = dtpI.value.date
                Dim VDATAF As Date = dtpF.value.date
                If vfiltro = "COMPLETO" Then
                    selcom.CommandText = "SELECT * FROM Tab_Homicidio  WHERE DATA BETWEEN #" & DATAI & "# and  #" & DATAF & "#  order by DATA"
                 endif 
                 Dim vleitor As OleDb.OleDbDataReader
                vleitor = selcom.ExecuteReader()
                Dim c As Integer = 0
                dgvHomicidios.Rows.Clear()
                Do While vleitor.Read
                    c = c + 1
                    ReDim Preserve areds(c)
                    ReDim Preserve aid(c)
                    ReDim Preserve adata(c)
                    ReDim Preserve amunicipio(c)
                    ReDim Preserve abairro(c)
                    ReDim Preserve ameio(c)
                    ReDim Preserve aprisao(c)
                    ReDim Preserve aautor(c)
                    ReDim Preserve avitima(c)
                    ReDim Preserve asexov(c)
                    ReDim Preserve asexoa(c)
                    ReDim Preserve aidadev(c)
                    ReDim Preserve aidadea(c)
                    ReDim Preserve amotivacao(c)
                    areds(c) = vleitor("REDS")
                    aid(c) = vleitor("Id")
                    adata(c) = vleitor("DATA")
                    amunicipio(c) = vleitor("MUNICIPIO")
                    ameio(c) = vleitor("MEIO")
                    abairro(c) = vleitor("BAIRRO")
                    aprisao(c) = vleitor("PRISAO_APREENSAO")
                    aautor(c) = vleitor("NOME_AUTOR_SUSPEITO")
                    avitima(c) = vleitor("NOME_VITIMA")
                    asexov(c) = vleitor("SEXO_VITIMA")
                    asexoa(c) = vleitor("SEXO_AUTOR")
                    aidadev(c) = vleitor("IDADE_VITIMA")
                    aidadea(c) = vleitor("IDADE_AUTOR")
                    amotivacao(c) = vleitor("MOTIVACAO")
                    dgvHomicidios.Rows.Add(areds(c), adata(c), amunicipio(c), abairro(c), ameio(c), aprisao(c), aautor(c), avitima(c), asexov(c), asexoa(c), aidadev(c), aidadea(c), amotivacao(c))
                Loop
                ToolStripStatusLabel1.Text = "Total de Homicídios na pesquisa: " & dgvHomicidios.RowCount
                '   dgvHomicidios.Rows.Add("")
                dgvHomicidios.Rows.Add("Fim do Relatório")
                conect.Close()
            Catch ex As Exception
                MessageBox.Show("Erro na execução da pesquisa!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End Sub

        Private Sub Estatistica_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            dgvHomicidios.AlternatingRowsDefaultCellStyle.BackColor = Color.LightYellow
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Close()
        End Sub

        Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
            MessageBox.Show("Selecione a pesquisa, copie com Ctrl C e cole numa planilha do Excel.", "Sistemas Homicídios", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Sub

        Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter

        End Sub
    End Class

    terça-feira, 5 de fevereiro de 2013 13:07
  • Seguindo o exemplo do nosso amigo Carlos, 

    no lugar de:

    selcom.CommandText = "SELECT * FROM Tab_Homicidio  WHERE DATA BETWEEN #" & DATAI & "# and  #" & DATAF & "#  order by DATA"

    use:

    selcom.CommandText = "SELECT * FROM Tab_Homicidio  WHERE DATA BETWEEN @dtInit and  @dtfinish order by DATA"


    selcom.parameters.AddParamWithValue("@dtInit",VDATAI)

    selcom.parameters.AddParamWithValue("@dtFinish",VDATAF)

    • Marcado como Resposta SRick quarta-feira, 6 de fevereiro de 2013 14:22
    terça-feira, 5 de fevereiro de 2013 13:31
  • Ok amigo, resolveu meu problema muito obrigado, ficou show de bola.

    Henrique

    • Marcado como Resposta SRick quarta-feira, 6 de fevereiro de 2013 14:22
    terça-feira, 5 de fevereiro de 2013 13:39
  • Olá,

    Poderia marcar a resposta, ou respostas, para ajudar outros usuários do fórum!

    []s,


    Carlos dos Santos
    blog: www.carloscds.net 
    twitter: @cdssoftware

    • Marcado como Resposta SRick terça-feira, 5 de fevereiro de 2013 16:27
    terça-feira, 5 de fevereiro de 2013 13:46
  • Olá,

    Poderia marcar a resposta, ou respostas, para ajudar outros usuários do fórum!

    []s,


    Carlos dos Santos
    blog: www.carloscds.net 
    twitter: @cdssoftware

    Boa
    terça-feira, 5 de fevereiro de 2013 13:59
  • Resolveu meu problema. Obrigado.
    sexta-feira, 7 de março de 2014 18:55