全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1139
推到 Plurk!
推到 Facebook!

有關Filtered的條件的通用寫法

尚未結案
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-10 10:27:47 IP:218.18.xxx.xxx 未訂閱
如下: var str,str1:string try if str<>'' then ss:=ss 'GoodsName=' '''' str ''''; if str1<>'' then ss:=ss ' and Spec=' '''' str1 ''''; NhStDataMod.QQuGoodsName.Filtered:=False; NhStDataMod.QQuGoodsName.Filter:=ss; finally NhStDataMod.QQuGoodsName.Filtered:=True; end; 可以通過﹐可如果str或str1的值為比如2mm*1mm*1'時就有錯誤﹐也就是值帶'或''時如何避免這種錯誤呢﹖
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-10 11:49:37 IP:202.39.xxx.xxx 未訂閱
begin
  // ...
    if str <> '' then
      ss := ss + 'GoodsName=' + QutoredStr(str);
    if str1<>'' then
      ss := ss + ' and Spec=' + QutoredStr(str1);
  // ...
end;
--- 每個人都是一本書
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-10 13:11:58 IP:218.163.xxx.xxx 未訂閱
1. NhStDataMod.QQuGoodsName.Filtered:=True;    2. NhStDataMod.QQuGoodsNameOnFilterRecord Event :    procedure FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var str,str1:string
begin
  ...
  Accept := ((str='') or
             (DataSet.FieldByName('GoodsName').AsString = str)) and
            ((str1='') or
             (DataSet.FieldByName('Spec').AsString = str1));
end;
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-10 13:42:43 IP:218.18.xxx.xxx 未訂閱
[quote]
begin
  // ...
    if str <> '' then
      ss := ss   'GoodsName='   QutoredStr(str);
    if str1<>'' then
      ss := ss   ' and Spec='   QutoredStr(str1);
  // ...
end;
編譯通不過﹐Undeclared identifier QutoredStr﹐是什么原因呢﹖ 發表人 - 比爾丐自 於 2003/06/10 13:43:38
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-10 13:48:00 IP:202.39.xxx.xxx 未訂閱
Sorry!  是 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=9549643&CC=213577">
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-10 14:16:39 IP:218.18.xxx.xxx 未訂閱
[quote]
1. NhStDataMod.QQuGoodsName.Filtered:=True;    2. NhStDataMod.QQuGoodsNameOnFilterRecord Event :    procedure FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var str,str1:string
begin
  ...
  Accept := ((str='') or
             (DataSet.FieldByName('GoodsName').AsString = str)) and
            ((str1='') or
             (DataSet.FieldByName('Spec').AsString = str1));
end;
謝謝Mickey,我按你所說的將此語句寫到Query的FilterRecord事件中可不執行﹐也就是查不到,我試在Accept前加了句showmessage('試')可為什么沒執行此段呢﹖當然第1步我寫了﹐問題存在什么地方呢﹖
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-10 14:47:25 IP:218.163.xxx.xxx 未訂閱
我試不會耶, 檢查 RunTime TQuery Open 之前,是否不小心改到 TQuery.Filtered := False;
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-10 14:51:31 IP:218.18.xxx.xxx 未訂閱
[quote] 我試不會耶, 檢查 RunTime TQuery Open 之前,是否不小心改到 TQuery.Filtered := False; 是不是只要設 Query.Filtered:=True 時馬上會執行FilterRecord 的過程呢﹖如是我在此方法中設置了showmessage('')來檢查可沒有執行此過程?我再試試。多謝。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-10 15:48:27 IP:202.39.xxx.xxx 未訂閱
小弟懷疑您是直接 Copy 這段 procedure FilterRecord(DataSet: TDataSet; var Accept: Boolean); 若真是這樣, 那當然不會觸發啦!    --- 每個人都是一本書
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-10 16:33:25 IP:218.18.xxx.xxx 未訂閱
[quote] 小弟懷疑您是直接 Copy 這段 procedure FilterRecord(DataSet: TDataSet; var Accept: Boolean); 若真是這樣, 那當然不會觸發啦! 谢谢hagar,我试想试一下Mickey所讲的。当然不是连procedure FilterRecord(DataSet: TDataSet; var Accept: Boolean);Copy ,而是将 Accept := ((str='') or (DataSet.FieldByName('GoodsName').AsString = str)) and ((str1='') or (DataSet.FieldByName('Spec').AsString = str1)); Copy 到我用的Query的FilterRecord方法,这不正确吗?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-10 17:12:49 IP:202.39.xxx.xxx 未訂閱
小弟試了一下 且 Filter 有值時 即使 Filtered 為 True, 也不會觸發 OnFilterRecord 事件 所以, 檢查一下 TQuery.Filter 值是否清空了.    --- 每個人都是一本書
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-10 22:25:44 IP:218.17.xxx.xxx 未訂閱
[quote] 小弟試了一下 且 Filter 有值時 即使 Filtered 為 True, 也不會觸發 OnFilterRecord 事件 所以, 檢查一下 TQuery.Filter 值是否清空了. 我試著將TQuery.Filter 值清空。且一直不給TQuery.Filter 值嗎﹖我直接將Mickey所說的兩點做到就可以了嗎﹖當然我的表已經是打開的。有資料顯示。按Mickey所說的且將TQuery.Filter 值清空就是不執行.可能還有什么地方沒檢查到。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-10 22:42:20 IP:202.39.xxx.xxx 未訂閱
Filtered 為 True 時 若 Filter 有值, 則 OnFilterRecord 不會被觸發 另外您說的不會執行是什麼意思? 沒觸發 OnFilterRecord 事件?還是執行結果不是您要的? 最後您的 Filter 值為何?可以貼出來嗎?    --- 每個人都是一本書
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-10 23:02:35 IP:218.17.xxx.xxx 未訂閱
[quote] Filtered 為 True 時 若 Filter 有值, 則 OnFilterRecord 不會被觸發 另外您說的不會執行是什麼意思? 沒觸發 OnFilterRecord 事件?還是執行結果不是您要的? 最後您的 Filter 值為何?可以貼出來嗎? 謝謝hagar,最後 Filter 值設為空.是不是不能為空?我不明白。因我現要的值是用表示了。且放在 OnFilterRecord 。 Accept := ((str='') or (DataSet.FieldByName('GoodsName').AsString = str)) and ((str1='') or (DataSet.FieldByName('Spec').AsString = str1));現好象沒觸發 OnFilterRecord 事件。當然沒有我想要的值。謝謝指點.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-06-11 08:44:07 IP:202.39.xxx.xxx 未訂閱
1.Filtered 要設 True 2.要觸發 OnFilterRecord, Filter 屬性須為空字串 否則程式會以 Filter 的條件為準    您可以自己試試看, 設個簡單測試用的 Filter,  就可以看出端倪了 再不行, 要不要上傳到求助區? --- 每個人都是一本書< src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=9549643&CC=213577">
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-06-11 09:40:27 IP:218.17.xxx.xxx 未訂閱
[quote] 1.Filtered 要設 True 2.要觸發 OnFilterRecord, Filter 屬性須為空字串 否則程式會以 Filter 的條件為準    您可以自己試試看, 設個簡單測試用的 Filter,  就可以看出端倪了 再不行, 要不要上傳到求助區? 謝謝﹐我再試試問題到底出在那里。
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-06-17 09:51:09 IP:219.133.xxx.xxx 未訂閱
谢谢两位版主,你们不同的方法我都通过了。望还能多多指教!
系統時間:2024-06-02 0:05:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!