我有6個數據庫表格存儲有關佣金率的信息以及使用哪種費率(取決於客戶/供應商/產品和訂單日期)。SQL日期範圍查詢適用於某些表格,但不適用於其他表格
使用這些表格,我有一個過程來計算由於用戶的佣金數額。這工作正常秩序的第一階段,因爲它使用當前的日期,所以我SQL
是沿
Dim p1Dt As New DataTable
Dim pDa As New OleDbDataAdapter("SELECT * FROM [Promotional Rates] WHERE Supp_Code=? AND " & _
"Product_Code=? AND Rate_Start_One <= DATE() AND " & _
"Rate_End_One >= DATE()", con)
pDa.SelectCommand.Parameters.Add("@supplier", OleDbType.VarChar).Value = cmbSupplier.Text
pDa.SelectCommand.Parameters.Add("@product", OleDbType.VarChar).Value = ugr.Cells("Product_Code").Value
pDa.Fill(p1Dt)
然而行,當訂單已交付,該委員會隨後與重新計算該產品的交貨日期取自數據庫。
我這樣做的代碼有點不同,因爲它沒有使用當前日期進行計算。相反,我使用此代碼
Dim deliveryDate As Date
deliveryDate = ugr.Cells("Final_Delivery").Value
Dim p1Dt As New DataTable
Dim pDa As New OleDbDataAdapter("SELECT * FROM [Promotional Rates] WHERE Supp_Code=? " & _
"AND Product_Code=? AND Rate_Start_One <= #" & _
deliveryDate & "# AND Rate_End_One >= #" & _
deliveryDate & "#", con)
pDa.SelectCommand.Parameters.Add("@supplier", OleDbType.VarChar).Value = cmbSupplier.Text
pDa.SelectCommand.Parameters.Add("@product", OleDbType.VarChar).Value = ugr.Cells("Product_Code").Value
pDa.Fill(p1Dt)
如果我救Final_Delivery
值爲2017年11月3日(3月11日),該deliveryDate
值被指定爲2017年11月3日。
我對3月份的所有表格有Promotional Rates
表格的費率,所以我期望上面的查詢在表格中有1行,但是它返回0,所以使用了錯誤的佣金值。
當我使用DATE()
方法時,它不會發生這種情況,它會正確地查找表中的所有行,所以問題在於我在第二種方法中輸入日期的方式。
當我以這種格式編寫查詢時,爲什麼第二個方法在數據庫中找不到該行?
編輯
這是一個完整CommandText
,在數據庫中懸停在OleDbDataAdapter
變量,複製和粘貼CommandText
"SELECT * FROM [Promotional Rates] WHERE Supp_Code=? AND Product_Code=? AND Rate_Start_One " & _
"<= #11/03/2017# AND Rate_End_One >= #11/03/2017#"
的數據後,證明它有正確的日期在:
銷售線(對於Final_Delivery
值)
促銷價格(日期範圍)
您使用了供應商和產品的參數,您可以/應該提供日期作爲日期參數。格式和文化不再重要(只要它們是DB中的日期)。 – Plutonix