iT邦幫忙

0

VISUAL STUDIO 連接mdb查詢

GJ 2021-05-11 15:22:39405 瀏覽

請問我有查詢語法如下
原本全部在win 7開發編譯完運行都正常可查,改WIN10 就無法查出資料
但我把這串放到access的查詢設計裡可以正常撈到資料
用where ID=XXX 正常,懷疑是日期語法問題
但VISUAL STUDIO沒有報錯也不知錯在哪?
資料表裡的日期格式是這樣2015/7/31 下午 07:33:00

SELECT Access.ID, Mid(Access.DrNo,2,2) AS Expr1, Format([Access.Date],'yyyy/mm/dd') AS Expr2, Format([Access.Date],'Short Time') AS Expr3
FROM Access
WHERE Access.Date Between Dateadd('d',-1,date()) And now();

1 個回答

1
japhenchen
iT邦大師 1 級 ‧ 2021-05-11 15:40:46

Windows10 →開始→設定→日期與時間→右上的【日期、時間及地區格式設定】→右上的【其他日期、時間與地區設定】→選最下方的【變更日期、時間或數字格字】

把畫面中這兩項選成TT的格式,下方的簡短及完整時間要出現"上午、下午",就對了
https://ithelp.ithome.com.tw/upload/images/20210511/20117954d1YBrqYZKS.jpg

看更多先前的回應...收起先前的回應...

反正就是要弄得跟你的資料庫裡的日期時間格式相同
https://ithelp.ithome.com.tw/upload/images/20210511/201179543rzXlWEUkx.jpg

資料庫的日期時間不要用字串型式存放,不然存的時候要轉toLocaleString,以後換別的系統就會冒出這種怪現象

GJ iT邦研究生 3 級 ‧ 2021-05-11 18:12:27 檢舉

我測試了還是一樣抓不了
Date確定不是文字格式儲存

你開發平台是?

GJ iT邦研究生 3 級 ‧ 2021-05-12 09:24:00 檢舉

win10 + vs2017
因資料庫端是win10跟一個刷卡機軟體
只是要抓出資料轉TXT入到考勤

我的做法是用刷卡機原廠提供的sdk去機器內讀取記錄(我們可能不會是同一家硬體)

那你是從原廠的MDB裡去讀資料,你是用OLEDB連還是ODBC?最簡單的方法就是你用SqlCommand串查詢句,日期時間自己用ToString("yyyy/MM/dd TT hh/mm/ss")轉成字串去串SQL

如果你的指紋機也是對岸ZKTeco的話,可以考慮直接用SDK去叫記錄,還挺簡單的,我用VS2019 C# .Net 5.0去調都沒問題
https://www.zkteco.com/en/download_catgory/46.html

GJ iT邦研究生 3 級 ‧ 2021-05-12 09:40:56 檢舉

廠商沒有提供SDK可用,我也找原廠官網看看
是用OLEDB查的,您說的是select date tostring這樣嗎?

你的查詢方式是什麼?LINQ?SqlCommand ?

GJ iT邦研究生 3 級 ‧ 2021-05-17 12:41:39 檢舉

是SqlCommand

可不可以貼出你的where 之後是怎麼寫的?

如果是題目上寫的那樣,那建議你在C#裡就把日期時間轉成字串格式下去查,在ACCESS裡日期時間可以用字串比對及區間查詢

DateTime now = DateTime.Now;
string dateStart = (now.AddDays(-1).ToString("yyyy/MM/dd tt hh:nn:ss");
string dateEnd = now.ToString("yyyy/MM/dd tt hh:nn:ss");
string SQL = ".............. WHERE Access.Date Between "+DateStart+" And "+dateEnd+ ";";

SqlCommand command = new SqlCommand(SQL,connstr);
//後面就你自己理解了
GJ iT邦研究生 3 級 ‧ 2021-05-18 12:11:54 檢舉

下面這串,放ACCESS裡是可以WORK
近期都先讓同事手動轉,再來找問題原因

 Dim cmdtex As String = "SELECT Access.ID, Mid(Access.DrNo,2,2) AS Expr1, Format([Access.Date],'yyyy/mm/dd') AS Expr2, Format([Access.Date],'Short Time') AS Expr3  FROM Access  WHERE Access.Date Between Dateadd('d',-1,date()) And now()"

access 沒經過oledb或jet來轉,所以不會出現時間字串的問題

我要發表回答

立即登入回答