2013-08-29 71 views
1

晚報,如何使用查詢

我已經創建了假設僅一個Date/Time字段的年份部分更改爲1900,當一個人89歲以上的查詢來設置字段的年份部分。後面的查詢編譯得很好,但是運行時它會抱怨Type Conversion failure,並從受影響的記錄中刪除整個值。

查詢:

UPDATE tblTestForDOB 
SET tblTestForDOB.[PT_BirthDate] = DateValue((day([PT_BirthDate])/month([PT_BirthDate])/1900)) 
WHERE Year(tblTestForDOB.[PT_BirthDate]) <= Year(Date())-"89"; 

根據該MS幫助(在函數F1):

所需日期參數通常是表示從100年1月1通過一個日期的字符串表達式但是,日期也可以是任何可以表示該範圍中的日期,時間或同時表示日期和時間的表達式。

這不正是我在做什麼?我也嘗試將" " &放在DateValue函數內部的值之前,並且做了同樣的事情 (以確保它是一個已通過的字符串)

那麼我該如何去做呢?我應該使用CDate將該值轉換爲日期,然後按照這種方式進行操作?如果是的話,這是什麼正確的語法?

由於

P.S領域是Short Date格式。另外請注意,我不想走很長的路,並使用VBA的整個事情,因爲這涉及打開記錄集等等......

回答

1

看來你試圖給DateValue一個字符串,但那不是發生了什麼。可能會有更多的事情我不明白,所以我只會告訴你一個即時窗口會話,它可能包含你可以建立的東西。

PT_BirthDate = #1923-6-1# 
? PT_BirthDate 
6/1/1923 
? DateDiff("yyyy", PT_BirthDate, Date()) 
90 

' this throws error #13: Type mismatch ... 
? DateValue((day([PT_BirthDate])/month([PT_BirthDate])/1900)) 

' it will work when you give DateValue a string ... 
? DateValue("1900-" & Month(PT_BirthDate) & "-" & Day(PT_BirthDate)) 
6/1/1900 
' or consider DateSerial instead ... 
? DateSerial(1900, Month(PT_BirthDate), Day(PT_BirthDate)) 
6/1/1900 
+1

偉大的答案 - 即時窗口現在已經成爲我最喜歡的事情:)謝謝 – Katana24

+0

我很高興聽到你這麼說。每個Access開發者都應該讓立即窗口成爲他最好的朋友之一。 :-) – HansUp