我在與我的MS Access創建數據庫的問題零長度領域目錄記錄2003與子表單
有一個表(姑且稱之爲tblItems)與四個字段:ID,描述,類別,子類別。 sub_category字段是唯一不需要的字段,它允許零長度的數據。
我創建基於該表(frmAddItems),它有兩個組合框(cboCategory & cboSubCategory),文本框(txtDescription)和一個子表單(sbfExistingItems)這是應該列出基於現有項目形式在兩個組合框中選擇了什麼。只要選擇了子類別,此功能就可以完美工作,但如果沒有子類別,則sbfExistingItems爲空。
記錄源爲sbfExistingItems是: 「SELECT tblItems.id,tblItems.description,tblItems.category,tblItems.sub_category FROM tblItems ORDER BY [描述];」
frmAddItems和sbfExistingItems鏈接如下:
- 子字段:類別; sub_category
- 主字段:cboCategory; cboSubCategory
的問題可能涉及到Access如何處理零但我不知道如何讓它做我想做的事情。任何幫助將不勝感激。
更新
正如jhTuppeny建議,我已刪除子窗體子/主鏈路,並添加以下代碼:
Private Sub txtDescription_GotFocus()
Dim sql As String
sql = "SELECT id, description, category, sub_category FROM tblItems"
If IsNull(Me!cboCategory) Or Me!cboCategory = "" Then
' leave recordsource unfiltered
ElseIf IsNull(Me!cboSubCategory) Or Me!cboSubCategory= "" Then
sql = sql & " WHERE [category] = '" & Me!cboCategory & "'"
Else
sql = sql & " WHERE [category] = '" & Me!cboCategory & "' AND [sub_category] = '" & Me!cboSubCategory & "'"
End If
sql = sql & " ORDER BY [description];"
Me!sbfExistingItems.Form.RecordSource = sql
End Sub
但現在的子窗體的行爲像小孩/主字段在「id」上鍊接,僅列出當前項目。
我猜是什麼讓我需要一種方法來改變子窗體的形式中的子/主字段的值,而沒有主要的形式認爲我要離開它,而所需的txtDescription字段是空。
我只是在想,我的下一步就是開始學習調試。好的,所以我添加了該行並單擊了「運行」按鈕,但我唯一得到的是一個彈出窗口,要求輸入一個宏名稱。我點擊取消,但沒有其他事情發生。我打開「主」表單運行宏。這是我應該輸入的名字嗎? – gr8dane
好吧,明白了。當存在子類別時,查詢返回預期的結果,但當它爲空(我的原始問題)時,返回的結果爲空。從我在其他地方看到的,當比較null = null時,Access失敗。 – gr8dane
這只是讓我意識到,當cboSubCategory爲空(或「」)時,它實際上跳過了「ElseIf ...」並轉到了「Else ...」,這正是我試圖避免的。我究竟做錯了什麼? – gr8dane