select * from [N-生產表] where 員工代號='B00170' and 開始日期<=#2004/1/1# and 終止日期>=#2004/1/1#
Rst.CursorLocation = adUseClient
Rst.Open Sql, cn1, adOpenStatic, adLockPessimistic
出現執行錯誤 -2147217900
'#'附近的語法不正確
小第我實在眼拙,看不出錯誤在哪
請各位前輩指點
環境:Win2000 Access XP專案
謝謝!!!
Rst.CursorLocation = adUseClient
Rst.Open Sql, cn1, adOpenStatic, adLockPessimistic
出現執行錯誤 -2147217900
'#'附近的語法不正確
小第我實在眼拙,看不出錯誤在哪
請各位前輩指點
環境:Win2000 Access XP專案
謝謝!!!
文章標籤
全站熱搜

試試看,會好也不一定!! select * from [N-生產表] where 員工代號='B00170' and 開始日期<='2004/1/1' and 終止日期>='2004/1/1'
路兄的方法也試過 雖然不會出現錯誤提示 但是所得的結果會不準確
Access 用 # ,所以沒差 我會建議用 Access 內建的 SQL 語法產生器來比較語法,通常會括號
看起來好像是日期存在文字型態欄位, 如果是的話可能需要用left()or mid() or right()先做過濾
不是文字形態欄位,是datatime形態 用SQL產器則得出的語句比較繁瑣 上面的語句將變為如下: select * from [N-生產表] WHERE (開始日期 <= CONVERT(DATETIME, '2004-01-01 00:00:00', 102)) AND (終止日期 >= CONVERT(DATETIME, '2004-01-01 00:00:00', 102)) 有沒有簡單一點的方法呢? 再說用select * from [N-生產表] where 員工代號='B00170' and 開始日期<=#2004/1/1# and 終止日期>=#2004/1/1#方法在Access環境下應該是正確的.為何會出錯呢? 還請各位前輩指點 謝謝!!!
你上面那句是 SQL Server 所產生的吧... Access 自己也有自己的 SQL 語法產生器... Access 跟 SQL Server 日期所用的分隔符號不同,確保型態正確下,就有可能自動引用 CONVERT 轉換函數。 我在 Access 的 SQL 語法下測過沒問題的話,沒碰過有問題的,或許你所組成的字串中含特殊字元,導致看起來相同,實際上不同。 註:Access 是以 VBA 引擎解譯 SQL 語法,所以日期分隔符號用 # ,但是很多 VBA 的函數都支援,玩起來更多好玩的... 這部份可以參考線上手冊
忘了說,CONVERT 本身就是特殊轉換函數,我印象中 Access 不支援,但是 SQL Server 及 Oracle 支援,Access 可以用 CDate ...
您的開始日期和終止日期是兩個不同的欄位?? 也許要這樣吧!! →select * from [N-生產表] where 開始日期<='2004/1/1' In 終止日期>='2004/1/1' and 員工代號='B00170' 大概是這樣,因為語法我不太記得了!! 還不行的話,我建議您到下列網站問阿利大大吧,祝好運!! http//www.cu29.sytes.net/
忘了說,我用的是Access專案引用SQL資料庫,CONVERT 確實是我在Acess專案中通過SQL語法產生器產生的 路兄的語法我還是第一次看到,試試看先 謝謝兩位大大
如果你是在 Access 中使用 SQL Server 資料庫,那就應該用 SQL Server 的 SQL 語法產生器產生,那種情況下,就跟在 VB 中用 SQL Server 是一樣的,那就跟 Access 沒關係。
可是用select * from [N-生產表] where 員工代號='B00170' and 開始日期<='2004/1/1' and 終止日期>='2004/1/1' 得出的結果不準確啊
結果不準確跟不能執行是兩回事,結果會如同在 SQL Server 下所下的,這部分在程式碼就沒問題。 不準確如果是指有些看起來為 2004/1/1 的,卻不在範圍內,那就是另外一個問題。 比如說 2003/12/31 23:59:59.500 ~ 2004/1/1 0:0:0.499 顯示出來的皆為 2004/1/1 ,但是判斷敘述轉換的為 2004/1/1 0:0:0 ,所以會有一些看起來是 2004/1/1 的被排除在外。 這類解決方法是查詢時做型別轉換,通常轉成字串查字串,另一種是資料寫入前,做型別雙重轉換(先轉字串消去精度誤差,再轉回日期型別),這在所有資料庫上都會發生,因為日期變數是依據 IEEE 的定義而來,實際上為倍精度變數(short date 為單精度變數),所以會有精度誤差。 你必須把你所說的 "結果不準確" 做明確的描述,才知道你在說什麼。