Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 2854|回復(fù): 5
打印 上一主題 下一主題

[Access本身] 【Access小品】詞不達(dá)意 -- 對(duì)于混亂表達(dá)的分析示例

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-5-13 09:37:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 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é)果集。

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱
2#
發(fā)表于 2015-5-13 17:59:15 | 只看該作者
呵呵,智商不夠,看著太繞.
{:soso_e103:}

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2015-5-14 06:23:13 來(lái)自手機(jī) | 只看該作者
不錯(cuò) 很實(shí)用
4#
發(fā)表于 2015-5-28 10:35:49 | 只看該作者
呵呵,語(yǔ)文水平差,看得好像繞口令似的,最終也沒(méi)有明白到底數(shù)值型的來(lái)表達(dá)任意值 用什么來(lái)表示呢?{:soso_e120:}
5#
發(fā)表于 2015-7-20 14:38:57 | 只看該作者
學(xué)習(xí)學(xué)習(xí),謝謝分享!
6#
發(fā)表于 2016-8-20 11:26:07 | 只看該作者
已經(jīng)下載學(xué)習(xí),謝謝
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:19 , Processed in 0.114936 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表