1

夜、

Date/Time人が 89 歳以上の場合、フィールドの年の部分のみを 1900 に変更するクエリを作成しました。次のクエリは正常にコンパイルされますが、実行すると a について不平を言い、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 日から 9999 年 12 月 31 日までの日付を表す文字列式です。ただし、日付は、その範囲内の日付、時刻、または日付と時刻の両方を表す任意の式にすることもできます。 .

それは私がしていることではありませんか?" " &また、関数内の値の前に配置しようDateValueとしましたが、同じことを行いました(渡された文字列であることを確認するため)

では、どうすればいいのでしょうか?CDate値を日付に変換してから、そのように進める必要がありますか? もしそうなら、これの正しい構文は何ですか?

ありがとう

PSフィールドはShort Dateフォーマットです。また、長い道のりを歩んですべてに VBA を使用したくないことに注意してください。これには、レコード セットを開くなどの作業が含まれます...

4

1 に答える 1

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 
于 2013-08-29T16:49:41.893 に答える