iT邦幫忙

1

access表單準則判定,如何在查詢時,列為全部。

  • 分享至 

  • xImage

非高手請勿嚐試,此題很坑,慎試。

舉例:我有三個資料表
借閱表
欄位名稱為:「ID」、「借閱人」、「書本大綱」、「書本細目」、「大綱ID」、「細目ID」
大綱表
欄位名稱為:「綱ID」、「大綱名稱」
細目表
欄位名稱為:「目ID」、「細目名稱」

我製作了表單,目地:「查詢借閱人」。
我利用了VBA的方式
把表單的查詢資料表加入了「借閱表」,並使「大綱ID」的準則設定如下:
大綱()

VBA用法,內文如下:
Public bookMainrule
Public Function 大綱(){ 大綱=bookMainrule}

這樣方便我在表單,用下拉式清單,讓使用者可以選「大綱」來查詢。
利用VBA傳「綱ID」讓:下拉式選單傳值給「表單查詢表」

問題來了
做到這裡,只能查「大綱」,有哪些「借閱人」借走。
比如說(使用者在表單按完下拉式):
動物類->小明、大德、阿美
史記類->明太、林一

我想再加入細目名稱
列出「大綱」的「細目名稱」,有哪些「借閱人」借走。
動物類(金絲雀)->小明、大德
史記類(大清傳)->林一

這下有二個下拉式選單,我都是用VBA的方式傳值給「查詢表」
目前都很成功,我也有做出來。

但是我要的是
選完「大綱」時可列出所有人
以及
選完「大綱」「細目名稱」時可列出相關人

這時就做不到了
變成
選完「大綱」時不列出(因為「未選」細目名稱)
以及
選完「大綱」「細目名稱」時可列出相關人

求解
已經嚐試利用判斷準則如下,都不俱效用:
IIF(細目ID()="","Is Not Null",細目ID())
IIF(細目ID()="","*",細目ID())
IIF(細目ID()="",char(34)&*&char(34),細目ID())

就連VBA設定,也不行。
bookMainrule = "Is Not Null"
bookMainrule = "*"
bookMainrule = char(34)&*&char(34)

看更多先前的討論...收起先前的討論...
其實.....我完全不想回答。
淺水員 iT邦大師 6 級 ‧ 2023-03-18 09:34:29 檢舉
不要用VBA,直接用查詢參數
https://support.microsoft.com/en-us/office/use-parameters-in-queries-forms-and-reports-8209eb5c-1589-42e2-9b20-4181f4c7a356
然後在查詢那邊可以寫「OR [Forms]![表單名]![輸入元件名稱] IS NULL」

另外建議看一下正規化:https://ithelp.ithome.com.tw/articles/10229472
BeEvil_Y iT邦新手 4 級 ‧ 2023-03-18 13:46:32 檢舉
所以沒辦法透過VBA丟NULL給資料庫的準則裡面?卻可以丟數字與文字??這不太可能吧。沒人知道怎麼丟嗎?
BeEvil_Y iT邦新手 4 級 ‧ 2023-03-18 13:52:00 檢舉
我用淺水員的方式去重構算了,VBA不能丟Null、萬用字元給準則是一件很奇怪的事情。我還以為是要用中括號,還是跳脫字元去處理。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
alien663
iT邦研究生 3 級 ‧ 2023-03-17 17:28:34

沒有很難啊,這真正的問題是資料儲存跟需求差距太大,調整資料庫架構,使其更直覺,ER Model如下:
https://ithelp.ithome.com.tw/upload/images/20230317/20153982igsaI0zoiL.jpg

透過分類建立綱目的tree狀架構,看會員要借閱"綱"還是"目"都可以。

看更多先前的回應...收起先前的回應...
tenzzz iT邦新手 5 級 ‧ 2023-03-17 19:46:34 檢舉

感謝分享解惑

BeEvil_Y iT邦新手 4 級 ‧ 2023-03-17 19:57:25 檢舉

沒錯
我可以很簡單用其他的語言,
比方PHP+MYSQL或ASP.NET+ACCESS,
或是visual basic直接做一個EXE來執行,
就可以達到我的目標!

但是今天,我是用純Acesss來做。
來回答我的,只有三種答案。
一:不可能做到,我白問了(答案:準則只支援INT、String)。
二:成功給了一個可以傳*或Is Not Null的方式。
三:不走準則過濾,直接用VBA連資料庫調資料(這就像PHP+MYSQL了)。

答案是GOOGLE不到的。
大學的專科書可能也沒寫。
所以只有這領域專業的能回答我。
答案也只會有這三種。

懂的人一看就知道答案了…
其它的還是先路過吧...時間省下來…

alien663 iT邦研究生 3 級 ‧ 2023-03-18 01:36:32 檢舉

我的中文造詣可能沒有很好,聽不太懂你的意思...
我的建議是更改資料庫設計(所以只有ER Model),因為很明顯你資料存放的設計跟需求差異挺大的,跟其他程式語言沒有關係阿。

BeEvil_Y iT邦新手 4 級 ‧ 2023-03-18 13:57:57 檢舉

謝謝您的回答...
但我不是問資料庫的結構....
我舉例的借閱表、大綱表、細目表
在access裡面,借閱表是提供查詢用的「主表」。
大綱表、細目表是給下拉式選單用的「材料表」......
所以除非你很懂Access表單,不然很難懂我在說什麼…

像是在EXCEL,你要給人去用下拉式選單,給人去選。
你還是要給程式表格資料,不然它哪知道要秀哪些東西。

alien663 iT邦研究生 3 級 ‧ 2023-03-20 09:45:17 檢舉

我或許知道你真正的問題了....

  1. Access是資料庫,不是excel那種表單,可以參照Wiki的介紹Access(還是此Access非彼Access?)。
  2. ER Model是談論資料庫設計時常用的方法,類似寫程式會用流程圖那樣,雖然表達方法不同,但我想我那樣的表達方法算是主流之一。
  3. 借閱是當去借才會產生的資料,我應該是先有,然後人和書產生借閱行為後才有借閱資料。在這範例中,人、書為Entity,這些資料室在生活中可以對應到實際的東西;借閱是Relationship,是實際物體之間互動時所產生的資料,當沒有Entity,Relationship將沒有任何意義。
  4. 如果你的案子已經在線上,那就只需要在原本架構上多建立綱目關聯即可,不需要重購,但若是開發期,你的架構很顯然不符合需求,不是那麼建議繼續使用。

我一開始看你的論述,還以為你對資料庫有一定程度的了解,才會覺得給ER Model已經足夠,看來是我誤會了。
關於那個ER Model的設計,大致觀念詳細如下:

  • 分類
ID Name Type
1 動物類
2 史記類
3 金絲雀
4 大清傳
  • 綱目
ID1 ID2
1 3
2 4
  • 會員
ID Name
1 小明
2 大德
3 阿美
4 明太
5 林一
  • 借閱
CID MID
3 1
3 3
4 5

這樣子的設計,可以根據你的需求去撈資料,而欄位可以自己思考要那些:

  • 借閱表
select * -- 
from 分類 as C, 借閱 as B, 會員 as M
where C.ID = B.CID and B.MID = M.ID
  • 綱目關係
select * 
from 分類 as C1, 綱目 as I, 分類 as C2
where C1.ID = I.ID1 and I.ID2 = C2.ID
BeEvil_Y iT邦新手 4 級 ‧ 2023-03-20 10:32:22 檢舉

大哥,Access是資料庫沒有錯。
我前面也都有講,
我可以做成PHP+Mysql或Asp.net+ACE。
非常簡單就能完成。
你說的也都很好。
但它Access也是微型程式啊!!!
它是可以做成一個,電腦白痴都會用的微EXE檔啊!!
可以手點一點輸入資料、查詢的好用東西啊!
就像EXCEL的樞紐分析表啊!!
我問的是表單,不是資料庫的結構。
Access不是只有資料庫而已。
Yes

你看看上面影片,
有什麼資料庫正規化的東西嗎?

沒有吧??!!你是不是沒看到這些東西?

這東西在台灣,很多地方都有在使用。
工程事務所、會計事務、昌儲管理、中小企業、醫療體系。

包括早期的銀行、農會
因為它是閉包,不用連網
隨處可見,是很常見的東西!!
(當然也有公司製作成純VB.EXE的那例外)

15年前,很多大學都在教這些東西。
Excel、Acess 含VBA
一本500~900頁分上下冊
一頁字體只有12點,沒圖的一頁就有1200字。
上下本總計10萬字以上(不含圖)。

現在大學都改教python+AI了(微笑..)
教這個畢業等於失業的東西。

希望你看完會覺得很離譜。
學習曲線很低,就可以達到用戶的一般需求。

畢竟市場隨處可見
你們的競爭對手,就是這些東西。

很多商家,寧願繼續使用這些東西。
也不要去用PHP、ASP.NET、RUB什麼的
用一用,一下子被僵屍DDOS
一下資安被駭。

這些東西就是方便用戶「搞自閉」做帳用的。
為什麼要線上化??

一邊要面對ChatGPT,一邊要面對VBA。
所以辛苦你們了

你看看現在的大學生,學什麼Python。
頂多車牌辯視、人臉辨視這種保全用的以外。
有什麼用途呢?

不信你去各所大學,找應屆畢業生。
要他們用Python寫一個微型的計帳系統。
看是不是一整大片的人,原地愣在那裡。

所以我....
不是在問結構的東西,拜托您了,謝謝您真誠的回答。
我要給你最佳解答,也很奇怪。不符題意。
以上謝謝。

淺水員 iT邦大師 6 級 ‧ 2023-03-20 11:28:51 檢舉

連 Excel 我都建議了解正規化了
更別說 Access 本身就可以用 SQL 查詢資料

正規化只是一種概念
不限於資料庫才能使用

另外上面那個影片是第14集
他在16集就開始提正規化了
Yes

BeEvil_Y iT邦新手 4 級 ‧ 2023-03-20 11:36:58 檢舉

那影片第14集的客戶資料,也沒有正規化啊,你怎麼不去YOUTUBE留言一下?
我三個表,有二個表是拿來做下拉式表格的,沒有要關聯用,是要正規化什麼
主表是查詢表,沒有正規化的意義。
通篇探討正規化,能解決問題嗎?
查詢表的意思是,已經inner join好的表,給表單呈現用。
表單沒有在用資料表的,都是查詢表。
1主(查詢表) 2材(按鍵用)
總共3表
雖然離題很遠了,還是謝謝你們的回答。

0
davidliu9116
iT邦研究生 2 級 ‧ 2023-09-04 13:47:16
這是寫在表單,改變表單資料來源
me.RecordSource="select a.ID, a.借閱人, a.書本大綱, a.書本細目, a.大綱ID, b.大綱名稱, a.細目ID, c.細目名稱
                   from 借閱表 as a left join
                        大綱表 as b on a.大綱ID=b.綱ID left join
                        細目表 as c on a.細目ID=c.目ID
                  where a.大綱ID like '" & nz(me.大綱ID查詢欄位,"*") & "'
                     or a.細目ID like '" & nz(me.細目ID查詢欄位,"*") & "'"

你也可以修改一下放到查詢裡面

我要發表回答

立即登入回答