我想要一個DBGrid顯示基於4 dbLookupCombobox'es過濾的產品
如果我選擇一個製造商,那麼Category1-3將更新/過濾並僅顯示所選產品的現有類別製造商。
如果我然後選擇一個Category1,那麼Category2-3將更新/篩選並僅顯示所選製造商和Category1的產品的現有類別。
與Category2相同,但包含Category1的選擇。SQL在Delphi中過濾DBGrid
此外,我希望只能從Category1 + 2中選擇,沒有選擇製造商。
無論我從這4個Combos中選擇什麼,我都希望DBGrid更新並顯示過濾後的產品。
完成過濾後,我需要重置過濾器按鈕重新開始。
場景:
1x FDConnection, Firebird.
5x FDQuery and Datasources
1x DBGrid
4x dbLookupComboBox
1x Button
的查詢:
FDQuery1: FDQ_Manufacturers:
select distinct MANUFACTURERNAME from Products where
upper (CATEGORYTEXT1) like upper(:CATEGORYTEXT1)
and upper(CATEGORYTEXT2) like upper(:CATEGORYTEXT2)
and upper(CATEGORYTEXT3) like upper(:CATEGORYTEXT3)
FDQuery2: FDQ_Category1
select distinct CATEGORYTEXT1 from Products where
upper(MANUFACTURERNAME) like upper(:MANUFACTURERNAME)
FDQuery3: FDQ_Category2
select distinct CATEGORYTEXT2 from Products where
upper(MANUFACTURERNAME) like upper(:MANUFACTURERNAME)
and upper(CATEGORYTEXT1) like upper(:CATEGORYTEXT1)
FDQuery4: FDQ_Category3
select distinct CATEGORYTEXT3 from Products where
upper(MANUFACTURERNAME) like upper(:MANUFACTURERNAME)
and upper(CATEGORYTEXT1) like upper(:CATEGORYTEXT1)
and upper(CATEGORYTEXT2) like upper(:CATEGORYTEXT2)
FDQuery5: FDQ_Products
select first 100 * from Products where
and upper(MANUFACTURERNAME) like upper(:MANUFACTURERNAME)
and upper(CATEGORYTEXT1) like upper(:CATEGORYTEXT1)
and upper(CATEGORYTEXT2) like upper(:CATEGORYTEXT2)
and upper(CATEGORYTEXT3) like upper(:CATEGORYTEXT3)
and upper(DESCRIPTION) like upper(:DESCRIPTION)
ORDER BY PRICE
的dbLookupComboBox'es:
dbLookupComboBox1: LCB_Manufacturers: OnSelect: FilterProducts('MANUFACTURERNAME', LCB_Manufacturers.Text);
dbLookupComboBox2: LCB_Category1: OnSelect: FilterProducts('CATEGORYTEXT1', LCB_Category1.Text);
dbLookupComboBox3: LCB_Category2: Onselect: FilterProducts('CATEGORYTEXT2', LCB_Category2.Text);
dbLookupComboBox4: LCB_Category3: OnSelect: FilterProducts('CATEGORYTEXT3', LCB_Category3.Text);
ListSource is the DataSources for each FDQuery.
ListField and KeyField is respectively the MANUFACTURERNAME, CATEGORYTEXT1, CATEGORYTEXT2, CATEGORYTEXT3
- 我初始化所有PARAMS以 '%%'
- 我運行FDQuery1-4,現在已經將所有制造商和類別填入Combos。
- 我運行FDQuery5並在DBGrid中有一個未經過濾的結果。
- 現在我們準備好進行SQL過濾了。
問題:
dbLookupComboBoxes是該任務組件的正確選擇嗎?
它是處理這種過濾的正確方法嗎?我想不出FilterProducts的過程。我可以展示我的代碼,但我真的不好,過着自己的生活..
對不起,帶來如此長的職位。 我在這花了很多時間,現在真的需要建議。
我有大約40,000條記錄,因此將它們全部加載到數據集中不是一種選擇。本地過濾器也是如此。 FilterProducts工作完美。謝謝。但是,如果您閱讀我的第一篇文章,我希望4個Comboboxes根據其他Combobox的選擇進行有效選擇更新。 - 我運行了它,但它殺死了我的大腦,因爲我無法找出正確的代碼。例如。我選擇一個製造商,並選擇一個類別1 + 2。然後,我希望改變類別1. Boom,Manufacurer組合現在是空的。我必須重新初始化。有任何這樣的技巧? –