[技術討論] 用SQL Command Search Date

本帖最後由 X-Engineer 於 2016-8-17 17:56 編輯

請問有咩錯?
想用兩個 DateTimePicker.Value.Date  Search Date range, then display the whole rows in DataGridView.

Data Type mismatch is solved.
But nothing display in DataGridView, only a blank row. Please help!! Thanks!!

Here's my updated code:
  1. Private Sub btnSearchTest_Click(sender As Object, e As EventArgs) Handles btnSearchTest.Click
  2.         con = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=|DataDirectory|\TESTDB.accdb")
  3.         con.Open()

  4.         Dim ds As New DataSet
  5.         Dim dt As New DataTable
  6.         Dim SelectedSearch As String
  7.         SelectedSearch = cbxSearchList.SelectedItem
  8.         ds.Tables.Add(dt)
  9.         Dim da As New OleDbDataAdapter
  10.         If cbxSearchList.SelectedItem = "Sign Date" Then
  11.             SelectedSearch = "SignDate"
  12.             Dim dtp1 As Date = DateTimePicker1.Value.Date
  13.             Dim dtp2 As Date = DateTimePicker2.Value.Date
  14.             da = New OleDbDataAdapter("SELECT * FROM User where " + SelectedSearch + " BETWEEN #" + dtp1 + "# and #" + dtp2 + "#", con)
  15.         End If

  16.         da.Fill(dt)
  17.         SearchDataGridView.DataSource = dt.DefaultView

  18.         con.Close()
  19.         SearchDataGridView.Show()
  20. End Sub
複製代碼

DateTimePicker 嘅 value 係String, 唔係Date

TOP

成個 command 後半變成 where ApplyDate BETWEEN '%2016/08/01%' and '%2016/08/31%'

你似乎想用  '% 同 %' 指定當中是  date type.  T-SQL 想指定係 date, 應該用 #....# 喎?

TOP

When I press the button, VS2013 error point to the following command
da.Fill(dt)

TOP

Updated..

TOP

本帖最後由 Charcoal99 於 2016-8-11 17:39 編輯

這個很正常, New OleDbDataAdapter(....) 果行只要是符合
1) OleDbDataAdapter()
2) OleDbDataAdapter(OleDbCommand)
3) OleDbDataAdapter(String, OleDbConnection)
4) OleDbDataAdapter(String, String) 這幾個 constructor format 便不會出錯,
至於 String 裡面是否合法的 SQL 並不是在這裡檢測而是在下一行 da.Fill(dt) 裡進行。
因為到 Fill Table 時 DataTable dt 才跟 da 連繫上,
與da 的Select statement 做欄位配對, 才能發現 Data type mismatch.

TOP

自己習慣用 >= date_1 and  <= date_2 (或者 <date_2 + N)
以前好似>= < 快過between
但近幾代好似已經同between冇分別?

TOP

這個很正常, New OleDbDataAdapter(....) 果行只要是符合
1) OleDbDataAdapter()
2) OleDbDataAdapter(OleD ...
Charcoal99 發表於 2016-8-11 17:35



    咁我要點做先CHECK到邊PART有問題呢?
我已經唔要DATETIMEPICKER, 改為6個Combobox.SelectedItem.ToString
都係一樣

謝指教!!!!!

TOP

本帖最後由 Charcoal99 於 2016-8-12 19:32 編輯

樓上師兄已經有提示啦,
你個 data source 有錯欄位估計係 Date/Time, 你供嘅型態不能只是 String, 要用 datatime delimiter('#')。
看官方文件, Data type 為 DATE 一段,  
https://msdn.microsoft.com/en-us ... PPError=-2147217396

PS. 其實你應學會看 Error Message 及 google
如輸入 "access datetime data type mismatch" 搜索....

TOP

樓上師兄已經有提示啦,
你個 data source 有錯欄位估計係 Date/Time, 你供嘅型態不能只是 String, 要用 dat ...
Charcoal99 發表於 2016-8-12 19:22



    Actually, I google a lot.............................
But only  "How to ........................."
I should try google error msg......
Thanks a lot.

Still working on it........

TOP