線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1475
推到 Plurk!
推到 Facebook!

三層架构Master-Detail中的Detail资料篩選問題

尚未結案
marike
一般會員


發表:4
回覆:5
積分:1
註冊:2004-06-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-28 13:36:56 IP:219.130.xxx.xxx 未訂閱
中間服務的Detail設定如下: Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; 客戶端的Detail設定如下: cQburrate.ProviderName:=pQbcurrate; cQburrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC'; cQbcurrate.DataSource:=cDbcurrency; 結果cQbcurrate還是把所有年份﹑月份的資料顯示出來了.請問這是什么原因,若不用過濾的方法(即不用Filter屬性及SetRange方法)怎么解決?
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-28 14:03:13 IP:203.204.xxx.xxx 未訂閱
引言: 中間服務的Detail設定如下: Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; 客戶端的Detail設定如下: cQburrate.ProviderName:=pQbcurrate; cQburrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC'; cQbcurrate.DataSource:=cDbcurrency; 結果cQbcurrate還是把所有年份﹑月份的資料顯示出來了.請問這是什么原因,若不用過濾的方法(即不用Filter屬性及SetRange方法)怎么解決?
取資料和你下的SQL有關係, 和Delphi的關係不大, 你可用SQL Monitor追蹤看看, 是不是所下的SQL有問題.
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
marike
一般會員


發表:4
回覆:5
積分:1
註冊:2004-06-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-28 15:23:16 IP:219.130.xxx.xxx 未訂閱
引言: 取資料和你下的SQL有關係, 和Delphi的關係不大, 你可用SQL Monitor追蹤看看, 是不是所下的SQL有問題.
我用SQL Monitor追蹤,沒有任何信息顯示.謝謝你!!
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-28 15:55:39 IP:203.204.xxx.xxx 未訂閱
引言: 我用SQL Monitor追蹤,沒有任何信息顯示.謝謝你!!
將追蹤到的SQL和參數, 用SQL Explorer執行SQL試試, 用BDE才有辦法用SQL Monitor追蹤.
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
marike
一般會員


發表:4
回覆:5
積分:1
註冊:2004-06-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-28 16:10:10 IP:219.130.xxx.xxx 未訂閱
引言: green] 將追蹤到的SQL和參數, 用SQL Explorer執行SQL試試, 用BDE才有辦法用SQL Monitor追蹤.[/green]
我中間服務用的是ADO﹐不能用SQL Monitor追蹤﹒不過我用下面的代碼可以實現﹐但覺得效率不高﹒ cQbcurrate.DataSource:=''; cQbcurrate.MasterFields:=''; cQbcurrate.PacketRecords:=-1; procedure TForm1.cQbcurrencyAfterScroll(DataSet: TDataSet); begin cQbcurrate.Close; cQbcurrate.CommandText:=Format('select * from bcurrate where Curr_no=''%s'' and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC',[DataSet.FieldByName('Curr_no').AsString]); cQbcurrate.Open; end; 請問還有別的方法嗎﹖
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-28 16:28:27 IP:203.204.xxx.xxx 未訂閱
引言: 我中間服務用的是ADO﹐不能用SQL Monitor追蹤﹒不過我用下面的代碼可以實現﹐但覺得效率不高﹒ cQbcurrate.DataSource:=''; cQbcurrate.MasterFields:=''; cQbcurrate.PacketRecords:=-1; procedure TForm1.cQbcurrencyAfterScroll(DataSet: TDataSet); begin cQbcurrate.Close; cQbcurrate.Open; end; 請問還有別的方法嗎﹖
你是指查資料的效率或是寫程式碼的效率, 程式碼可用如下, 會比較清楚:
cQbcurrate.CommandText
  := 'select * from bcurrate'
     ' where Curr_no    = '   QuotedStr(DataSet.FieldByName('Curr_no').AsString)
     '   and Curr_year  = 2003'
     '   and Curr_month = 3'
     ' order by Curr_year DESC,Curr_month DESC';
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
marike
一般會員


發表:4
回覆:5
積分:1
註冊:2004-06-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-28 16:35:52 IP:219.130.xxx.xxx 未訂閱
引言: 你是指查資料的效率或是寫程式碼的效率, 程式碼可用如下, 會比較清楚
我是指查資料的效率不高﹒請還有別的處理方法嗎﹖
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-28 16:49:35 IP:203.204.xxx.xxx 未訂閱
引言: 我是指查資料的效率不高﹒請還有別的處理方法嗎﹖
寫在AfterScroll才去抓Detail資料, 對於只要瀏覽其中某幾筆, 應該效率還不錯, 但如果用在列印全部資料, 就會變成資料常常需跟Server索取, 就會造成效率不好, 這時就要在Server設好Master/Detail的關聯, Client的Detail設上TDataSetField即可, 這樣就會將查到的所有資料一次下載, 當然會比原本的顯示慢些, 但後續的處理都會比較快.
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
jasonma168
一般會員


發表:39
回覆:33
積分:14
註冊:2002-05-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-28 17:46:51 IP:61.64.xxx.xxx 未訂閱
引言: 中間服務的Detail設定如下: Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; 客戶端的Detail設定如下: cQburrate.ProviderName:=pQbcurrate; cQburrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC'; cQbcurrate.DataSource:=cDbcurrency; 結果cQbcurrate還是把所有年份﹑月份的資料顯示出來了.請問這是什么原因,若不用過濾的方法(即不用Filter屬性及SetRange方法)怎么解決?
妳要決定Master/Detail關聯是要做在APServer端或是Client端 1.做在APServer端 Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; Client設定 cQbcurrate.DataSetField:= 關連欄位 2.做在Client端 Qbcurrate.CommandText:='select * from bcurrate order by Curr_year DESC,Curr_month DESC'; pQbcurrate.DataSet:=Qbcurrate; Client設定 Qbcurrate.DataSource:=Dbcurrency; cQburrate.ProviderName:=pQbcurrate; cQburrate.MasterSource:=cDbcurrency; cQburrate.MasterFields:='Curr_no';
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-04-30 13:44:49 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-07 21:42:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!