0

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

4

2 回答 2

0

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

SELECT HolidayDate FROM PubHol
WHERE HolidayDate BETWEEN ? AND ?

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

于 2012-05-02T14:19:17.157 回答
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) 

注意:如果 MySQL 表通过 ODBC 链接到 Access DB,您可以只使用 Access (Jet) SQL 语法。Access(或准确地说是 ODBC-Driver)会自动将其转换为 MySQL 语法。

于 2012-05-02T14:19:24.647 回答