問題:
Access裡面有組合框,可以很快地從多行記錄中選擇所需要的數據。但是如果記錄超過1000-2000呢?選擇就非常不方便了。我該怎麼辦?
回答:
其實很多數據都可以分類(分層)來選擇,而且我們可以預先篩選數據。
以下這個示例就是用重復打開同一個窗體類來完成多層次數據的選擇。
當然,還包括預先篩選數據功能。
在閱讀本文前請先參考:
《新手來看:如何設計表結構便於treevIEw顯示?》
http://Access911.Net/index.ASP?board=4&recordid=75FABE1E12DC
一文,以了解如何定義數據表結構可以方便的分類並顯示。
並閱讀:
《如何將一個窗體重復打開2遍,並且每一遍打開的窗體顯示不同的數據?》
http://Access911.Net/index.ASP?board=4&recordid=72FAB11E15DC
一文,以了解Access中一個FORM其實就是一個類
好了,現在開始:
1、建立一個窗體(testForm),裡面有一個文本框(text0),一個按鈕(Command2)。
2、建立一個窗體(selectForm),裡面有一個列表框(list0)。
3、在testForm中的文本框的“更新後”事件中寫入以下代碼以打開品名選擇窗體(selectForm),並對其中的列表框(list0)的行來源(RowSource)進行賦值。
PrivateSubText0_AfterUpdate()
DoCmd.OpenForm"selectform"
'這行代碼就實現了BTYPE表的模糊檢索,使用的是WHERE子句中的LIKE關鍵字進行通配
Forms("selectform").List0.RowSource="SELECTbtype.soncount,btype.UserCode,btype.FullName,btype.typeIdFROMbtypeWHEREbtype.fullnamelike'*"&Text0.Value&"*'"
EndSub
4、在testForm中的命令按鈕的“單擊”事件中寫入以下代碼以打開品名選擇窗體,按分類檢索
5、然後再在testForm中輸入以下代碼以完成多次打開窗體本身並顯示子類中數據的功能。
為了能夠使代碼重復利用,寫了兩個通用過程
OptionCompareDatabase
Dimf
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
'先設定窗體的“鍵預覽”屬性為“是”
'本過程將加快你的輸入速度
'如果按ESCAPE鍵,就關閉窗體
IfKeyCode=vbKeyEscapeThen
closeAllSelectForm"SelectForm"
EndIf
EndSub
PrivateSubList0_DblClick(CancelAsInteger)
checkYouSelect
EndSub
PrivateSubList0_KeyPress(KeyAsciiAsInteger)
'本過程實現全鍵盤操作
IfKeyAscii=13Then
checkYouSelect
EndIf
EndSub
SubcloseAllSelectForm(strFormNameAsString)
'通用過程1
'本過程用來關閉所有的指定名稱的窗體
ForEachobjFormInForms
IfobjForm.Name=strFormNameThen
DoCmd.CloseacForm,objForm.Name
EndIf
NextobjForm
EndSub
SubcheckYouSelect()
'通用過程2
'檢測你的選擇
'如果發現suncount列為0(表示沒有下一層了)
'就可以把你選定的產品名稱放到文本框中了
OnErrorResumeNext
Setf=NewForm_SelectForm
DimobjFormAsForm
IfList0.Column(0)=0Then
Forms("testform").Text0.Value=List0.Column(2)
closeAllSelectForm"SelectForm"
Else
f.Visible=True
f.List0.RowSource="SELECTbtype.soncount,btype.UserCode,btype.FullName,btype.typeIdFROMbtypeWHEREparid='"&List0.Value&"'"
EndIf
EndSub