2014-02-17 23 views
2

我在Access中有一個數據庫,我試圖讓文本框運行我的查詢,並將其他有界的文本框的值作爲DLookUp中的條件傳入。我有查詢在設計視圖中運行,當我直接輸入條件時,它會返回正確的結果。當我打開報告時,它給了我所有可能行的總和。換句話說,它不會過濾行。爲什麼我的查詢不使用我的標準?

我沒有使用訪問大約十二年,謝天謝地,和我所做的一切到這一點一直教程/例如錯落有致,但在這裏它是...

SQL查詢:

SELECT Sum(IIf(Attended=-1,1,0)) AS attendance 
FROM Students_Classes_Attendance 
WHERE (((CStr([Students_Classes_Attendance].[Class_Id]))=[classId])); 

使用DLookup爲控制源:

=DLookUp("[Total Attendance by Class]![attendance]", 
     "[Total Attendance by Class]", 
     "[Class_Id] =" & [Class_Id]) 

我的那一刻,我迷路了。我猜測這個值在查詢觸發前並不存在,因爲條件是一個可選參數,它被傳遞爲null,但我希望你會從中得到一個錯誤。反正#Error不是很有意義。

有沒有人知道確切的問題和糾正它的最好方法?謝謝。

編輯:
我做的答案推薦所以現在我DLookUp樣子的變化...

=DLookUp("[attendance]", 
     "[Total Attendance by Class]", 
     "[Class_Id] =" & [Class_Id]) 

...仍返回總所有行。刪除標準完全沒有區別,這使我認爲它與綁定文本框沒有價值有關。

回答

4

使用DLookup使用以下語法:

  1. 語法數值:
    使用DLookup( 「字段名」, 「表名」, 「條件= N」)

  2. 語法對於字符串:(注意在字符串值之前和之後的單撇號)
    DLookup(「FieldName」,「TableName」,「Criteria ='string'」)

  3. 語法日期:(之前和之後的日期值注意#)
    使用DLookup( 「字段名」, 「表名」, 「標準=#日期#」)

我相信你只需要從第一個參數中刪除表名。試試這個:

請記住,如果是類標識碼一個文本字段,你需要用單引號將其包圍:

=DLookUp("[attendance]", "[Total Attendance by Class]", "[Class_Id] = '" & [Class_Id] & "'") 
+0

謝謝,這並沒有改變不幸的報告。這是有道理的,我不需要表名,因爲查詢設計知道它。所以你不認爲這可能是文本框的問題,它獲取從表中加載的條件,查詢被調用時可能不存在?如果我一起刪除標準部分,報告是一樣的。 – ChiefTwoPencils

+0

在一個** MsgBox中敲擊「在DLookUp語句之前,類ID是」&[Class_Id]&「」**,看看它認爲該變量是什麼。 –

+0

我希望我的機器可以通過我的挫折。現在,即使我複製/粘貼從我直接從Access複製的帖子的內容,也會導致#Error。查詢仍然正常工作,但不在報告中。當我試圖添加你的小知識時,它說有語法錯誤 - 可能的操作符沒有操作數。 – ChiefTwoPencils