access 如何解決組合框無(wú)法滿足大量數(shù)據(jù)的選擇問(wèn)題?
2024-07-21 02:09:31
供稿:網(wǎng)友
如何解決組合框無(wú)法滿足大量數(shù)據(jù)的選擇問(wèn)題?
問(wèn)題:
access里面有組合框,可以很快地從多行記錄中選擇所需要的數(shù)據(jù)。但是如果記錄超過(guò)1000-2000呢?選擇就非常不方便了。我該怎么辦?
回答:
其實(shí)很多數(shù)據(jù)都可以分類(lèi)(分層)來(lái)選擇,而且我們可以預(yù)先篩選數(shù)據(jù)。
以下這個(gè)示例就是用重復(fù)打開(kāi)同一個(gè)窗體類(lèi)來(lái)完成多層次數(shù)據(jù)的選擇。
當(dāng)然,還包括預(yù)先篩選數(shù)據(jù)功能。
在閱讀本文前請(qǐng)先參考:
《新手來(lái)看:如何設(shè)計(jì)表結(jié)構(gòu)便于treeview顯示?》
http://access911.net/index.asp?board=4&recordid=75fabe1e12dc
一文,以了解如何定義數(shù)據(jù)表結(jié)構(gòu)可以方便的分類(lèi)并顯示。
并閱讀:
《如何將一個(gè)窗體重復(fù)打開(kāi)2遍,并且每一遍打開(kāi)的窗體顯示不同的數(shù)據(jù)?》
http://access911.net/index.asp?board=4&recordid=72fab11e15dc
一文,以了解 access 中一個(gè) form 其實(shí)就是一個(gè)類(lèi)
好了,現(xiàn)在開(kāi)始:
1、建立一個(gè)窗體(testform),里面有一個(gè)文本框(text0),一個(gè)按鈕(command2)。
2、建立一個(gè)窗體(selectform),里面有一個(gè)列表框(list0)。
3、在testform中的文本框的“更新后”事件中寫(xiě)入以下代碼以打開(kāi)品名選擇窗體(selectform),并對(duì)其中的列表框(list0)的行來(lái)源(rowsource)進(jìn)行賦值。
private sub text0_afterupdate()
docmd.openform "selectform"
'這行代碼就實(shí)現(xiàn)了btype表的模糊檢索,使用的是 where 子句中的 like 關(guān)鍵字進(jìn)行通配
forms("selectform").list0.rowsource = "select btype.soncount, btype.usercode, btype.fullname, btype.typeid from btype where btype.fullname like '*" & text0.value & "*' "
end sub
4、在testform中的命令按鈕的“單擊”事件中寫(xiě)入以下代碼以打開(kāi)品名選擇窗體,按分類(lèi)檢索
5、然后再在testform中輸入以下代碼以完成多次打開(kāi)窗體本身并顯示子類(lèi)中數(shù)據(jù)的功能。
為了能夠使代碼重復(fù)利用,寫(xiě)了兩個(gè)通用過(guò)程
option compare database
dim f
private sub form_keydown(keycode as integer, shift as integer)
'先設(shè)定窗體的“鍵預(yù)覽”屬性為“是”
'本過(guò)程將加快你的輸入速度
'如果按 escape 鍵,就關(guān)閉窗體
if keycode = vbkeyescape then
closeallselectform "selectform"
end if
end sub
private sub list0_dblclick(cancel as integer)
checkyouselect
end sub
private sub list0_keypress(keyascii as integer)
'本過(guò)程實(shí)現(xiàn)全鍵盤(pán)操作
if keyascii = 13 then
checkyouselect
end if
end sub
sub closeallselectform(strformname as string)
'通用過(guò)程1
'本過(guò)程用來(lái)關(guān)閉所有的指定名稱的窗體
for each objform in forms
if objform.name = strformname then
docmd.close acform, objform.name
end if
next objform
end sub
sub checkyouselect()
'通用過(guò)程2
'檢測(cè)你的選擇
'如果發(fā)現(xiàn) suncount 列為 0(表示沒(méi)有下一層了)
'就可以把你選定的產(chǎn)品名稱放到文本框中了
on error resume next
set f = new form_selectform
dim objform as form
if list0.column(0) = 0 then
forms("testform").text0.value = list0.column(2)
closeallselectform "selectform"
else
f.visible = true
f.list0.rowsource = "select btype.soncount, btype.usercode, btype.fullname, btype.typeid from btype where parid='" & list0.value & "'"
end if
end sub
詳細(xì)示例程序請(qǐng)參考:
http://www.access911.net/index.asp?board=8&recordid=77fab71e
http://access911.net 站長(zhǎng)收藏