如何在vb.net中获取两个日期之间的记录?

时间:2013-01-28 04:13:33

标签: vb.net ms-access

全部......

我需要显示从DateTimePickers传入的两个日期之间的记录。

我收到的记录不在我从vb.net指定的日期之间。

请仔细阅读以下代码....

以下是代码:

Private Sub btn_Show_Inquiry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Show_Inquiry.Click
    report_viewer_form.Report_viewer_CrystalReportViewer1.ReportSource = Nothing
    report_viewer_form.Report_viewer_CrystalReportViewer1.Refresh()
    str1 = "SELECT * FROM Inquiry_Details WHERE Inquiry_Date>=#" & dtp_inq_from.Text & "# AND Inquiry_Date<=#" & dtp_inq_to.Text & "#"

    If dtp_inq_from.Text > dtp_inq_to.Text Then
        MessageBox.Show("FROM_DATE Must Be Less Then TO_DATE.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Exit Sub
    End If
    If cn.State <> ConnectionState.Open Then
        cn.Open()
    End If
    da = New OleDbDataAdapter(str1, cn)

    report_dataset = New DataSet
    da.Fill(report_dataset, "table2")
    If MsgBox("Do You Want to Print Report ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
        report_viewer_form.Show()
        Dim cr As New ReportDocument
        cr = New Inquiry_CrystalReport
        cr.SetDataSource(report_dataset.Tables("table2"))
        report_viewer_form.Report_viewer_CrystalReportViewer1.ReportSource = cr
    End If
End Sub

1 个答案:

答案 0 :(得分:3)

您的问题似乎与解析传递日期参数到查询的方式有关,它们可能不是Access会识别为有效日期类型的格式。尝试使用 CDate() 函数让Access正确地将输入值解析为其内部日期类型。它将接受任何有效的date expression

  

任何可以解释为日期的表达式,包括日期   文字,看起来像日期的数字,看起来像日期的字符串,   和从函数返回的日期。日期表达式仅限于   任何组合中可以表示日期的数字或字符串   1月1日,100日 - 9999年12月31日。

您的代码可能如下所示:

str1 = "SELECT * FROM Inquiry_Details WHERE Inquiry_Date>=CDate('" & 
       dtp_inq_from.Text & "') AND Inquiry_Date<=CDate('" & 
       dtp_inq_to.Text & "')"

您可能想尝试的另一项功能(如果CDate不会将其删除)是 DateValue()

  

所需的日期参数通常是字符串表达式   表示从1999年1月1日到9999年12月31日的日期。   但是,date也可以是任何可以表示日期的表达式,a   在该范围内的时间,或者日期和时间。

这两个函数的成功可能还取决于输入日期格式和系统区域设置。