今日看到一個名曰蛋蛋的版友發(fā)貼問的一個問題:“請問,在數(shù)據(jù)庫中任意文本的表述可用“*”,“?”,“%”來表示,那若是數(shù)值型的要表示任意性用什么表達(dá)呀?具體表述如下:做的內(nèi)容是這樣有兩個選項,一個未完成(設(shè)為0),一個已完成(設(shè)為1),若分別選其中一個會根據(jù)之前的判斷0或1會出來相應(yīng)的內(nèi)容,若不選就默認(rèn)任意數(shù)值就會出來全部的! 這個問題很多版友進(jìn)行了回答,所有解答均沿著通配符的處理展開。這個問題真的涉及通配符嗎?答案是否定的。 暫且不論該問題的正確答案是什么。我們首先來分析一下,將解答引入歧途的原因是什么。該問題的表述的邏輯是從文本的通配符開始,進(jìn)而詢問到數(shù)值型的任意匹配,再到一個狀態(tài)字段的篩選。其實這個表述是詞不達(dá)意的,甚至是風(fēng)馬牛不相及!完全無須這么長的邏輯鏈來說明這個問題。只需要問:一個狀態(tài)字段的篩選,如何在為空值(Null)時,能顯示全部數(shù)據(jù)。也就是說,解決這個問題是否與通配符相關(guān)并非必要,提問時也不必考慮。 為什么提問時,無須考慮解決的過程,而只需說明結(jié)果呢?其原因有二,其一是提問者過多的表述,可能引起不必要的誤解(這一點在這個問題的解答中表現(xiàn)的很典型)。其二是實現(xiàn)一個需要的功能(也就是解決一個問題),可以有許多種方法,解答者可以根據(jù)自己的水平、偏好、對問題的理解,給出豐富多彩的答案。這些不同的答案,可以給提問者和其他版友不同側(cè)面的提示和思考。所以,特別要理解,問題和答案之間并非是一對一的關(guān)系,一對多的答案是常態(tài),也最有價值。 回到蛋蛋同志的問題上來。這個問題,實際上只需要看最后一部分,也就是關(guān)于一個字段的篩選問題而已。所謂篩選,就是按照某種邏輯表達(dá)式獲取記錄的結(jié)果集。所以重點是邏輯表達(dá)式,而邏輯表達(dá)式的結(jié)果無非兩種,要么是要么非。恒定的是,得到的是全部數(shù)據(jù)的結(jié)果集;恒定的非,得到的是空集;符合一定條件的是,得到的是子結(jié)果集。 明白了這個道理,我們要想得到全部數(shù)據(jù)(這是蛋蛋同志問題的核心),也就是要獲得一個恒定的是。那么怎么表達(dá)恒定的是呢?很簡單,True就是恒定的是。當(dāng)然你寫成-1(注意這是在Access中,其他地方可能是1)也行,還有人寫成1=1或者2=2什么的。只要這個表達(dá)式的結(jié)果是恒定的是就行。同理你要得到一個空集,就只需要False一家伙,也可寫成0,或者1=2什么的。 這層紙被捅破了,什么都不神秘,解決的方法也就是十分的簡單了。我們假設(shè)蛋蛋同志的主窗體上有一個名曰:“狀態(tài)”的組合框,該組合框數(shù)據(jù)源類型為值列表,其列表值為:0;未完成;1;已完成,寬度為0cm;2cm。假設(shè)子窗體中也有一個對應(yīng)的“狀態(tài)”控件。則在組合框的更新后事件中寫: 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)主窗體中的組合框未選值時,篩選字符串就是True,也就是一個恒定的是。篩選的結(jié)果集就是全部數(shù)據(jù)。此法不僅限于一個字段的篩選,也不僅限于數(shù)字型字段的篩選。當(dāng)多個控件組合篩選時,我們一樣可以借用這個方法來得到全部的或者部分的結(jié)果集。 |
|站長郵箱|小黑屋|手機版|Office中國/Access中國
( 粵ICP備10043721號-1 )
GMT+8, 2025-7-13 03:09 , Processed in 0.087044 second(s), 23 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.