0

Whereステートメント内でのみデータ型の不一致をスローする式に取り組んでいます。

Current: IIf(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99)>0,
IIf(DateAdd("yyyy",CInt(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99))
,CVDate(Format(Nz([TEST_DATE],19891231),"0000-00-00")))>Now(),True,False),True)

ご覧のとおり、Nz()すべての参照に関数を追加し、ステートメント全体にキャストしようとしましCBool()たが、それでもデータ型の不一致がスローされます。

私はそれをこの式に特定しました。式はstatementで期待どおりに機能しSelectます。Whereのみを返すステートメントに追加するとTrue、エラーが発生します。

何が欠けている可能性がありますか?

更新:興味のある人のための完全なクエリ

SELECT Student.TECH_ID, Student.CAPP_LVL, Values.ABBR, Values.SHORT_DESC, Values.LONG_DESC, Values.GROUP_NBR, Values.NBR_YRS_VALID, Student.SEQ_NBR, Student.CAPP_LVL_SCORE, Student.TEST_DATE, IIf(Nz([Values].[NBR_YRS_VALID],99)>0,IIf(DateAdd("yyyy",CInt([Values].[NBR_YRS_VALID]),CVDate(Format([TEST_DATE],"0000-00-00")))>Now(),True,False),True) AS [Current], Values.END_DATE, Student.LOAD_DATE
FROM Student INNER JOIN Values ON Student.CAPP_LVL = Values.CAPP_LVL
WHERE (((Values.ABBR)<>"MTHB") AND ((Values.END_DATE) Like "9999*"))
ORDER BY Student.TECH_ID, Student.CAPP_LVL, Student.SEQ_NBR;
4

3 に答える 3

2

TEST_DATE のデータ型と形式は何ですか? 日付/時刻データ型にしてデータを false に評価するとエラーが発生しますが、true に評価されれば機能します。そのため、Select で機能していることがわかります。TEST_DATE を double にして、nz 関数 (19981231) でフォーマットを使用すると、すべての場合に機能します。

于 2013-02-15T19:05:40.707 に答える
0

これは私のために働く:

SELECT 
    IIf(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99)>0,IIf(DateAdd("yyyy",
       CInt(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99)),
       CVDate(Format(Nz([TEST_DATE],19891231),"0000-00-00")))
         >Now(),True,False),True) 
       AS [Current],
    ISRS_VAL_ST_CAPP_LVL.NBR_YRS_VALID, 
    ISRS_VAL_ST_CAPP_LVL.TEST_DATE
FROM ISRS_VAL_ST_CAPP_LVL
WHERE (((IIf(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99)>0,IIf(DateAdd("yyyy",
    CInt(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99)),
    CVDate(Format(Nz([TEST_DATE],19891231),"0000-00-00")))
       >Now(),True,False),True))=true));

NBR_YRS_VALID と TEST_DATE の両方が倍長整数です

于 2013-02-15T19:32:02.263 に答える
0

ステートメントはステートメントのWhereようには見えませんSelect。Access は、true または false をテストできる条件式を期待しています。

簡単なバージョンでは、そのステートメント全体を取得してテストしTrueます。

WHERE (IIf(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99)>0,
IIf(DateAdd("yyyy",CInt(Nz([ISRS_VAL_ST_CAPP_LVL].[NBR_YRS_VALID],99))
,CVDate(Format(Nz([TEST_DATE],19891231),"0000-00-00")))>Now(),True,False),True))
= True

ANDより良い解決策は、 orで結合されたいくつかの異なる条件ステートメントとして書き直すことORです。私はそれを解析するのに苦労しているので、それを試してみようとは思わない.

于 2013-02-15T19:01:15.230 に答える