我試圖修復我用來比較日期,開始和結束時間的cfif語句。因此,我的if語句的第一部分工作正常,我設置邏輯以檢查日期是否相等,如果它們要比較數據庫中的開始時間與參數傳遞的開始時間以及結束時間相同。我的代碼在這種情況下打破,如果我已經有了:如何防止時間重疊?
Date: 01/31/2016 Start Time: 8:30 AM End Time: 9:50 AM
,我試圖通過接下來的三個參數:
Date 01/31/2016 Start Time 10:00 AM End Time: 10:40 AM
所以我的代碼應該允許這一點,因爲我們做的要保存在數據庫時隙沒有重疊。但是這個日期和時間應該只允許一次。但是如果我不斷嘗試保存這個不止一次,我的代碼不會停止。下面是用我的邏輯:
<cfif arguments.datepicker EQ qryTable1.DateMeet>
<cfif ((arguments.StartTime LTE qryTable1.Stime AND arguments.EndTime LTE qryTable1.Stime) OR (arguments.StartTime GTE qryTable1.Etime AND arguments.EndTime GTE qryTable1.Etime))>
<cfquery name="qryTable1" datasource="test">
Insert Into Schedule(DateMeet, Stime, Etime)
Values (<cfqueryparam cfsqltype="cf_sql_date" value="#arguments.datepicker#">,
<cfqueryparam cfsqltype="cf_sql_time" value="#arguments.StartTime#">,
<cfqueryparam cfsqltype="cf_sql_time" value="#arguments.EndTime#">)
</cfquery>
</cfif>
<cfelse>
<cfif arguments.datepicker EQ qryTable1.DateMeet>
<cfquery name="qryTable1" datasource="test">
Insert Into Schedule(DateMeet, Stime, Etime)
Values (<cfqueryparam cfsqltype="cf_sql_date" value="#arguments.datepicker#">,
<cfqueryparam cfsqltype="cf_sql_time" value="#arguments.StartTime#">,
<cfqueryparam cfsqltype="cf_sql_time" value="#arguments.EndTime#">)
</cfquery>
</cfif>
</cfif>
我仍然無法找到爲什麼我的邏輯捕捉如果我選擇在同一日期重疊時間,但如果我撿的東西是超出範圍和保存一次,讓我多次這樣做。如果有人能看出我的邏輯有什麼問題,請告訴我。謝謝。
很好的解釋。雖然對於第二部分,你的意思是寫「endDateTime * b *小於* a *的startDateTime」嗎? – Leigh
@ user3023588 - 請記住CF是多線程的,所以使用你當前的方法有一點競爭條件的機會。考慮在SQL中執行邏輯,只有插入操作不會有重疊。使用「結果」屬性檢查受影響記錄的數量。如果它是'> 0',你知道插入是成功的。否則,它失敗了,你可以忽略它或採取其他一些行動,如拋出一個錯誤。 – Leigh