将日期范围与表VBA中的日期进行比较

时间:2012-05-02 14:02:47

标签: mysql ms-access vba date

我使用MS Access作为MySQL服务器数据库的前端。在数据库中,我有一个名为PubHol(意思是公共假期)的表,列出了公共假期的日期dd / mm / yyyy。我有一个表单(链接到一个单独的表),我输入course_start date和course_end date。我想创建一个函数,该函数在字段的lostfocus上触发自身,函数检查日期范围是否输入course_start和course_end是否与PubHol中列出的日期一致。例如,如果客户有课程开始01/01/2012和课程结束15/01/2012并且PubHol中有一个日期介于10/01/2012之间我希望收到一个MsgBox说些什么。谢谢

2 个答案:

答案 0 :(得分:0)

听起来你只想向MySQL发出BETWEEN查询:

SELECT HolidayDate FROM PubHol
WHERE HolidayDate BETWEEN ? AND ?

...并使用您感兴趣的Course_StartCourse_End值填写查询参数。(我假设VBA可以处理参数化查询。)

答案 1 :(得分:0)

假设您在数据库中使用了日期数据类型而不是字符串数据类型,那么测试假日属于日期范围将在VBA中显示如下

Dim condition As String
Dim course_start As Date, course_end As Date

course_start = ...
course_end = ...
condition = "[Holiday] Between #" & Format$(course_start,"yyyy\/mm\/dd") & _
            "# AND #" & Format$(course_end,"yyyy\/mm\/dd") & "#"
If DCount("*", "PubHol", condition) > 0 Then
    MsgBox ...
End If

我在Access库中找到了这个功能

Public Function JetSqlDate(ByVal d As Variant) As String
    If IsNull(d) Then
        JetSqlDate = "NULL"
    Else
        JetSqlDate = Format$(d, "\#mm\/dd\/yyyy hh\:nn\:ss\#")
    End If
End Function

使用它简化了条件

condition = "[Holiday] Between " & JetSqlDate(course_start) & _
            " AND " & JetSqlDate(course_end) 

注意:如果使用ODBC将MySQL表链接到Access DB,则可以使用Access(Jet)SQL语法。 Access(或者说是精确的ODBC驱动程序)会自动将其转换为MySQL语法。