非高手請勿嚐試,此題很坑,慎試。
舉例:我有三個資料表
借閱表
欄位名稱為:「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)
沒有很難啊,這真正的問題是資料儲存跟需求差距太大,調整資料庫架構,使其更直覺,ER Model如下:
透過分類建立綱目的tree狀架構,看會員要借閱"綱"還是"目"都可以。
感謝分享解惑
沒錯
我可以很簡單用其他的語言,
比方PHP+MYSQL或ASP.NET+ACCESS,
或是visual basic直接做一個EXE來執行,
就可以達到我的目標!
但是今天,我是用純Acesss來做。
來回答我的,只有三種答案。
一:不可能做到,我白問了(答案:準則只支援INT、String)。
二:成功給了一個可以傳*或Is Not Null的方式。
三:不走準則過濾,直接用VBA連資料庫調資料(這就像PHP+MYSQL了)。
答案是GOOGLE不到的。
大學的專科書可能也沒寫。
所以只有這領域專業的能回答我。
答案也只會有這三種。
懂的人一看就知道答案了…
其它的還是先路過吧...時間省下來…
我的中文造詣可能沒有很好,聽不太懂你的意思...
我的建議是更改資料庫設計(所以只有ER Model),因為很明顯你資料存放的設計跟需求差異挺大的,跟其他程式語言沒有關係阿。
謝謝您的回答...
但我不是問資料庫的結構....
我舉例的借閱表、大綱表、細目表
在access裡面,借閱表是提供查詢用的「主表」。
大綱表、細目表是給下拉式選單用的「材料表」......
所以除非你很懂Access表單,不然很難懂我在說什麼…
像是在EXCEL,你要給人去用下拉式選單,給人去選。
你還是要給程式表格資料,不然它哪知道要秀哪些東西。
我或許知道你真正的問題了....
借閱
是當人
去借書
才會產生的資料,我應該是先有人
和書
,然後人和書產生借閱
行為後才有借閱資料。在這範例中,人、書為Entity
,這些資料室在生活中可以對應到實際的東西;借閱是Relationship
,是實際物體之間互動時所產生的資料,當沒有Entity,Relationship將沒有任何意義。我一開始看你的論述,還以為你對資料庫有一定程度的了解,才會覺得給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
大哥,Access是資料庫沒有錯。
我前面也都有講,
我可以做成PHP+Mysql或Asp.net+ACE。
非常簡單就能完成。
你說的也都很好。
但它Access也是微型程式啊!!!
它是可以做成一個,電腦白癡都會用的微EXE檔啊!!
可以手點一點輸入資料、查詢的好用東西啊!
就像EXCEL的樞紐分析表啊!!
我問的是表單,不是資料庫的結構。
Access不是只有資料庫而已。
你看看上面影片,
有什麼資料庫正規化的東西嗎?
沒有吧??!!你是不是沒看到這些東西?
這東西在台灣,很多地方都有在使用。
工程事務所、會計事務、昌儲管理、中小企業、醫療體系。
包括早期的銀行、農會
因為它是閉包,不用連網
隨處可見,是很常見的東西!!
(當然也有公司製作成純VB.EXE的那例外)
15年前,很多大學都在教這些東西。
Excel、Acess 含VBA
一本500~900頁分上下冊
一頁字體只有12點,沒圖的一頁就有1200字。
上下本總計10萬字以上(不含圖)。
現在大學都改教python+AI了(微笑..)
教這個畢業等於失業的東西。
希望你看完會覺得很離譜。
學習曲線很低,就可以達到用戶的一般需求。
畢竟市場隨處可見
你們的競爭對手,就是這些東西。
很多商家,寧願繼續使用這些東西。
也不要去用PHP、ASP.NET、RUB什麼的
用一用,一下子被僵屍DDOS
一下資安被駭。
這些東西就是方便用戶「搞自閉」做帳用的。
為什麼要線上化??
一邊要面對ChatGPT,一邊要面對VBA。
所以辛苦你們了
你看看現在的大學生,學什麼Python。
頂多車牌辯視、人臉辨視這種保全用的以外。
有什麼用途呢?
不信你去各所大學,找應屆畢業生。
要他們用Python寫一個微型的計帳系統。
看是不是一整大片的人,原地愣在那裡。
所以我....
不是在問結構的東西,拜托您了,謝謝您真誠的回答。
我要給你最佳解答,也很奇怪。不符題意。
以上謝謝。
連 Excel 我都建議了解正規化了
更別說 Access 本身就可以用 SQL 查詢資料
正規化只是一種概念
不限於資料庫才能使用
另外上面那個影片是第14集
他在16集就開始提正規化了
那影片第14集的客戶資料,也沒有正規化啊,你怎麼不去YOUTUBE留言一下?
我三個表,有二個表是拿來做下拉式表格的,沒有要關聯用,是要正規化什麼
主表是查詢表,沒有正規化的意義。
通篇探討正規化,能解決問題嗎?
查詢表的意思是,已經inner join好的表,給表單呈現用。
表單沒有在用資料表的,都是查詢表。
1主(查詢表) 2材(按鍵用)
總共3表
雖然離題很遠了,還是謝謝你們的回答。
這是寫在表單,改變表單資料來源
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查詢欄位,"*") & "'"
你也可以修改一下放到查詢裡面