請問 Filter 出現 EOleException,不能用 NOT IN 嗎? |
尚未結案
|
jimmygump
一般會員 發表:8 回覆:12 積分:4 註冊:2003-09-09 發送簡訊給我 |
EOleException:
引數中可能發生類型錯誤、超過可接受的定義範圍、或與其他引數發生衝突 Delphi 7.0 + d7_ent_upd1_1 + Access 2000 mdb 程式:
with adoqrySelect do begin Filtered := False; // GetSelectedList 取得 ClientDataSet 中已新增進去的記錄主鍵值 Filter := 'ID NOT IN '+GetSelectedList; Filtered := True; .... end;請問,Filter 如果是類似 'ID NOT IN (8, 17,35, 99)' 這樣不行嗎? 這語法在 Query 或直接在 Access 中並不會有錯,唯有 Filter 時才出錯。 查了很多人也遇到相同的錯誤訊息,到底 Filter 有沒有什麼語法限制?和 SQL 的 WHERE 不完全相容嗎?我目前還查不到 Filter 語法限制的相關資訊說...如果都要改寫成 WHERE 加上 ' AND ID NOT IN'+GetSelectedList;的方式,那麼都得再做 adoqrySelect.ReQuery....那就和 Close, Open 一樣....蠻傷的
------
Jimmy Gump |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
jimmygump
一般會員 發表:8 回覆:12 積分:4 註冊:2003-09-09 發送簡訊給我 |
唉...如果是這樣,那最壞打算,就是 merge 那一道 WHERE 條件,免不了要重新 Query 了。 討論一下這樣的設計風格好了...故事是這樣的...
這是為了設計一個 master-detail 的 detail 輔助輸入公用畫面,不同於一般帶回一筆的輔助選取,這次的需求是提供一次帶回多筆的功能。 所以那個畫面的需求為:
1. 第一階段
.接受呼叫者的 SQL,然後用 ADOQuery1,顯示在一個 DBGrid1。
.提供各顯示欄位的 incremental serach,直接移動 DBGrid1 到該筆。
(一個選擇欄位的 ComboBox1,一個輸入查詢值的 Edit1,OnChange 做 ADOQuery1.Locate)
.DBGrid1 可以 MultiSelect 2. 第二階段
.本來是 MultiSelect 之後,按個確定鈕就帶回了。但因為候選的記錄可能很多,用 ctrl click 之後的 MultiSelect 反白可能很分散,最後使用者可能搞不清楚選了哪些記錄。所以再提供一個 "已選取" 的機制,比較能讓已選取的記錄集中顯示。 .以 ClientDataSet1 複製一個和 ADOQuery1 相同欄位定義的記憶體 dataset,供另一個 DBGrid2 顯示。
.同時複製 DBGrid1 的 Columns 定義到 DBGrid2,讓兩個 DBGrid 看起來欄位都相同。 .在 DBGrid1 和 DBGrid2 之間,提供三個按鈕:
.Select:將 DBGrid1 的 MultiSelect Rows 新增到 ClientDataSet,並從 DBGrid1 中消失。
.UnSelect:將 DBGrid2 的 MultiSelect Rows 自 ClientDataSet 刪除,並在 DBGrid 中重新顯示。
.ClearAll:將 ClientDataSet 的記錄全部刪除,DBGrid1 中回復到剛呼叫時的狀態。 .按任何一個按鈕,都必須在兩個 DBGrid 之間反應出記錄的移動。這也就是為什麼想要在 DBGrid1 的 ADOQuery 做 Filter 的原始想法!因為無法預期使用者按這三個按鈕的頻率,如果ADOQuery 都實際去 ReQuery 的話,後果不知如何。 .最後當按下確定鈕,則由呼叫者自行依 ClientDataSet 最終結果做 detail 的整批新增。 目前我手頭上沒有測試資料,據使用者估計,經過 detail 的 OnEditButtonClick 呼叫此畫面,傳入 SQL 已有部份 WHERE 條件,初估平均 DBGrid1 會顯示 5000~7000 筆。每張 master-detail 的 detail 筆數不管帶回幾次,總數不會超過 120 筆。(i.e. 幾萬筆中 query 出 5000 筆,然後總共選出 120 筆)
希望這樣的操作不會因為 ReQuery 而使 user 覺得太慢。 這樣的畫面應該很常見,同樣這樣的功能,不知道大家怎麼實作的? Jimmy Gump
------
Jimmy Gump |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |