我使用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说些什么。谢谢
答案 0 :(得分:0)
听起来你只想向MySQL发出BETWEEN
查询:
SELECT HolidayDate FROM PubHol
WHERE HolidayDate BETWEEN ? AND ?
...并使用您感兴趣的Course_Start
和Course_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语法。