技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 21536
|
本帖最后由 todaynew 于 2015-5-13 09:52 編輯
今日看到一個(gè)名曰蛋蛋的版友發(fā)貼問(wèn)的一個(gè)問(wèn)題:“請(qǐng)問(wèn),在數(shù)據(jù)庫(kù)中任意文本的表述可用“*”,“?”,“%”來(lái)表示,那若是數(shù)值型的要表示任意性用什么表達(dá)呀?具體表述如下:做的內(nèi)容是這樣有兩個(gè)選項(xiàng),一個(gè)未完成(設(shè)為0),一個(gè)已完成(設(shè)為1),若分別選其中一個(gè)會(huì)根據(jù)之前的判斷0或1會(huì)出來(lái)相應(yīng)的內(nèi)容,若不選就默認(rèn)任意數(shù)值就會(huì)出來(lái)全部的。”
這個(gè)問(wèn)題很多版友進(jìn)行了回答,所有解答均沿著通配符的處理展開(kāi)。這個(gè)問(wèn)題真的涉及通配符嗎?答案是否定的。
暫且不論該問(wèn)題的正確答案是什么。我們首先來(lái)分析一下,將解答引入歧途的原因是什么。該問(wèn)題的表述的邏輯是從文本的通配符開(kāi)始,進(jìn)而詢問(wèn)到數(shù)值型的任意匹配,再到一個(gè)狀態(tài)字段的篩選。其實(shí)這個(gè)表述是詞不達(dá)意的,甚至是風(fēng)馬牛不相及!完全無(wú)須這么長(zhǎng)的邏輯鏈來(lái)說(shuō)明這個(gè)問(wèn)題。只需要問(wèn):一個(gè)狀態(tài)字段的篩選,如何在為空值(Null)時(shí),能顯示全部數(shù)據(jù)。也就是說(shuō),解決這個(gè)問(wèn)題是否與通配符相關(guān)并非必要,提問(wèn)時(shí)也不必考慮。
為什么提問(wèn)時(shí),無(wú)須考慮解決的過(guò)程,而只需說(shuō)明結(jié)果呢?其原因有二,其一是提問(wèn)者過(guò)多的表述,可能引起不必要的誤解(這一點(diǎn)在這個(gè)問(wèn)題的解答中表現(xiàn)的很典型)。其二是實(shí)現(xiàn)一個(gè)需要的功能(也就是解決一個(gè)問(wèn)題),可以有許多種方法,解答者可以根據(jù)自己的水平、偏好、對(duì)問(wèn)題的理解,給出豐富多彩的答案。這些不同的答案,可以給提問(wèn)者和其他版友不同側(cè)面的提示和思考。所以,特別要理解,問(wèn)題和答案之間并非是一對(duì)一的關(guān)系,一對(duì)多的答案是常態(tài),也最有價(jià)值。
回到蛋蛋同志的問(wèn)題上來(lái)。這個(gè)問(wèn)題,實(shí)際上只需要看最后一部分,也就是關(guān)于一個(gè)字段的篩選問(wèn)題而已。所謂篩選,就是按照某種邏輯表達(dá)式獲取記錄的結(jié)果集。所以重點(diǎn)是邏輯表達(dá)式,而邏輯表達(dá)式的結(jié)果無(wú)非兩種,要么是要么非。恒定的是,得到的是全部數(shù)據(jù)的結(jié)果集;恒定的非,得到的是空集;符合一定條件的是,得到的是子結(jié)果集。
明白了這個(gè)道理,我們要想得到全部數(shù)據(jù)(這是蛋蛋同志問(wèn)題的核心),也就是要獲得一個(gè)恒定的是。那么怎么表達(dá)恒定的是呢?很簡(jiǎn)單,True就是恒定的是。當(dāng)然你寫(xiě)成-1(注意這是在Access中,其他地方可能是1)也行,還有人寫(xiě)成1=1或者2=2什么的。只要這個(gè)表達(dá)式的結(jié)果是恒定的是就行。同理你要得到一個(gè)空集,就只需要False一家伙,也可寫(xiě)成0,或者1=2什么的。
這層紙被捅破了,什么都不神秘,解決的方法也就是十分的簡(jiǎn)單了。我們假設(shè)蛋蛋同志的主窗體上有一個(gè)名曰:“狀態(tài)”的組合框,該組合框數(shù)據(jù)源類型為值列表,其列表值為:0;未完成;1;已完成,寬度為0cm;2cm。假設(shè)子窗體中也有一個(gè)對(duì)應(yīng)的“狀態(tài)”控件。則在組合框的更新后事件中寫(xiě):
dim wh as string
wh="True"
if isnull(me.狀態(tài).value)=false then
wh=wh & " and 狀態(tài)=" & me.狀態(tài).value
end if
me.子窗體.form.filter=wh
me.子窗體.form.filteron=true
這樣當(dāng)主窗體中的組合框未選值時(shí),篩選字符串就是True,也就是一個(gè)恒定的是。篩選的結(jié)果集就是全部數(shù)據(jù)。此法不僅限于一個(gè)字段的篩選,也不僅限于數(shù)字型字段的篩選。當(dāng)多個(gè)控件組合篩選時(shí),我們一樣可以借用這個(gè)方法來(lái)得到全部的或者部分的結(jié)果集。
|
|