2012-05-02 112 views
0

我正在使用MS Access作爲MySQL服務器數據庫的前端。在數據庫中,我有一個名爲PubHol(意思是公共假期)的表格,列出公共假期的日期dd/mm/yyyy。我有一個表格(鏈接到一個單獨的表格),我輸入course_start日期和course_end日期。我想創建一個函數,在函數檢查日期範圍輸入course_start和course_end是否與PubHol中列出的日期一致的字段的lostfocus上觸發自己。例如,如果客戶的課程開始時間爲01/01/2012,課程結束時間爲15/01/2012,並且PubHol中的日期爲前10/01/2012之間時,我希望收到一個MsgBox說某事。謝謝比較日期範圍與表中的日期VBA

+0

你的意思是你將日期存儲爲* strings *?如果是這樣,爲什麼不使用更合適的字段將它們存儲爲*日期*? –

+0

嗨。我將公共假期的日期作爲日期存儲在表格中。 course_start和course_end日期位於另一個表格(Main_Data_Table)中,該表格基本上是預訂表格。我需要的是,當員工進入一個新的預訂,他們輸入course_start和Course_end與PubHol表中的一個日期相符合時,他們收到一條消息說bla bla bla ...謝謝 – elstiv

+0

對,所以當你給「dd/mm/yyyy「部分,這完全不相干,對嗎?它不像文本格式實際上*它們是如何存儲的? –

回答

0

這聽起來像你只是想發出一個BETWEEN查詢到MySQL:

SELECT HolidayDate FROM PubHol 
WHERE HolidayDate BETWEEN ? AND ? 

...並在與Course_StartCourse_End值你感興趣的查詢參數填寫。 (我假定VBA可以處理參數化查詢。)

+0

非常感謝 - 我會嘗試它並恢復... – elstiv

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 

我在訪問庫

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錶鏈接到Access數據庫使用ODBC,您可以使用Access(Jet)SQL語法。訪問(或ODBC驅動程序是精確的)會自動將其轉換爲MySQL語法。

+0

非常感謝,明天早上將嘗試它並恢復。再次感謝 – elstiv

+1

*如果*平臺支持使用類型化值和參數化SQL,我強烈推薦使用這兩種方法,而不是依賴字符串格式並在SQL中包含數據。 –

+0

@JonSkeet:我同意參數化查詢通常更好;然而,在這裏我正在使用一個類型爲「Date」的值,並且我們有一個桌面場景。所以SQL注入應該不成問題。此外,我想使用方便的內置'DCount'功能。我想知道,如果SQL注入可能通過'DCount'和通過ODBC? –