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

TADOQuery Load XML後查詢

答題得分者是:smallfox
shunaaron
高階會員


發表:13
回覆:94
積分:106
註冊:2006-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-11-10 18:00:58 IP:123.127.xxx.xxx 訂閱
ttQy是TADOQuery
ttQy.Close;
ttQy.LoadFromFile(PChar(C:\5.xml'));
ttQy.Open;
ttQy.First;
這樣可以取得先前先查出來的資料
但如果想在使用篩選後在open
ex:
name like 'U%'
name = '55'
請問要如何實現呢?
------
程式沒有這麼難
只是還沒打通其中要絕
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-11-10 20:26:37 IP:111.249.xxx.xxx 未訂閱
讀出來的資料庫並不受到資料庫支援,所以沒辦法對load xml的資料集進行sql語法的查詢

只能使用 for if 判斷式囉。
shunaaron
高階會員


發表:13
回覆:94
積分:106
註冊:2006-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-11-10 20:45:47 IP:123.127.xxx.xxx 訂閱
是丫...目前就是要這樣做...只是不知能不能有其他變通法呢...
===================引 用 GrandRURU 文 章===================
讀出來的資料庫並不受到資料庫支援,所以沒辦法對load xml的資料集進行sql語法的查詢

只能使用 for if 判斷式囉。
------
程式沒有這麼難
只是還沒打通其中要絕
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-11-11 08:44:44 IP:203.75.xxx.xxx 未訂閱
當然也是有其它作法啦
比方說,臨時表
印象中M$ SQL有這項功能,在記憶體裡直接開一張表格來存放暫存資料,但具體的實作方法我不清楚 (我嘴炮了,因為我是直接開實體的TEMP TABLE來處理啦。 XD)

將LOAD XML的資料集轉存到DB的TABLE裡,然後再用SQL處理,結束後再EMPTY TABLE。

看起來步驟很多,但實際上的程式碼應該會比 FOR IF 程式處理來得更少。
編輯記錄
GrandRURU 重新編輯於 2010-11-10 17:45:08, 註解 無‧
smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-11-11 23:38:54 IP:211.74.xxx.xxx 訂閱
可否用過 Filter & Filtered 兩個屬性 ?!
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-11-12 00:12:44 IP:111.249.xxx.xxx 未訂閱
剛試了一下,這個真的是好方法!
在Filter設定 [name like 'U%' and name = 55]
再把Filtered設為True就可以做篩選了
哈哈!

smalfox大真是太厲害了

===================引 用 smallfox 文 章===================
可否用過 Filter & Filtered 兩個屬性?!
shunaaron
高階會員


發表:13
回覆:94
積分:106
註冊:2006-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-11-12 10:04:06 IP:123.127.xxx.xxx 訂閱
這方式之前有試過,在和DB有連結下可以,但沒有情況下會有錯
不知RURU大大是測試哪一個的,
目前改用TClientDataSet試看看可不可行,謝囉
===================引 用 GrandRURU 文 章===================
剛試了一下,這個真的是好方法!
在Filter設定 [name like 'U%' and name = 55]
再把Filtered設為True就可以做篩選了
哈哈!

smalfox大真是太厲害了

===================引 用 smallfox 文 章===================
可否用過 Filter & Filtered 兩個屬性?!
------
程式沒有這麼難
只是還沒打通其中要絕
shunaaron
高階會員


發表:13
回覆:94
積分:106
註冊:2006-10-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-11-12 11:26:44 IP:123.127.xxx.xxx 訂閱
感謝二位大大
剛試了TClientDataSet可以使用,又回頭使用TADOQuery也是可以的,
應該是之前豬頭Filter 第一個條件多了and....樣子一直不通過...
不過也剛好測試2者效能如何,數據如下表,再次感謝2位大大,
分數就給smallfox 大大囉,嘿!
TADOQueryTClientDataSet
總筆數:95279.017~13.561秒10.588~20.141秒
本機開啟時間0.693~0.742秒0.020~0.042秒
本機條件搜尋筆數:2470.067~0.130秒 0.001~0.004秒
檔案大小1625KB1968KB

===================引 用 GrandRURU 文 章===================
剛試了一下,這個
真的是好方法!
在Filter設定 [name like 'U%' and name = 55]
再把Filtered設為True就可以做篩選了
哈哈!

smalfox大真是太厲害了

===================引 用 smallfox 文 章===================
可否用過 Filter & Filtered 兩個屬性?!
------
程式沒有這麼難
只是還沒打通其中要絕
編輯記錄
shunaaron 重新編輯於 2010-11-11 20:30:18, 註解 無‧
smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-11-12 23:27:23 IP:203.73.xxx.xxx 訂閱
利用Filter來下達類似SQL command的做法會受制於運算子 AND & OR 不能混合使用,
而且AND運算子也有一定的使用量, 遇到大量條件運算時, 還是得使用迴圈的話,
使用 TClientDataSet 在 Local 端的記憶體中建立一個暫存表(欄位名稱及型態都可自訂),
利用TADOQuery來讀取資料後, 再存入 TClientDataSet (之後TADOQuery就可關閉),
這樣不用在後端資料庫中生成暫存表, 可不受資料庫別(如換成Oracle)語法的限制,
使用者在資料庫的權限也可降低一些.
可是相當方便哩 !! 這也算是另一種過濾紀錄的方式 ...

===================引 用 GrandRURU 文 章===================
當然也是有其它作法啦
比方說,臨時表
印象中M$ SQL有這項功能,在記憶體裡直接開一張表格來存放暫存資料,但具體的實作方法我不清楚 (我嘴炮了,因為我是直接開實體的TEMP TABLE來處理啦。 XD)

將LOAD XML的資料集轉存到DB的TABLE裡,然後再用SQL處理,結束後再EMPTY TABLE。

看起來步驟很多,但實際上的程式碼應該會比 FOR IF 程式處理來得更少。
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-11-13 22:35:24 IP:111.254.xxx.xxx 訂閱
用 TADOQuery 或是 TADODataSet 的話,也可以在 Open 之後,先 Last 把合乎條件的資料都抓進記憶體
再把 Connection 屬性設定為 nil,把與資料庫的連結關係切斷
這樣資料還是保留著,接下來再用 Filter 來過濾資料
就可以省掉把資料搬到 TClientDataSet 的功夫
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
shunaaron
高階會員


發表:13
回覆:94
積分:106
註冊:2006-10-06

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-11-14 21:16:32 IP:123.127.xxx.xxx 訂閱
因為會不斷來回查詢這些相關資料,
所以會,來回不斷與資料庫往來,
之前是將查過資料會於memory裡,
現在是想試看看別模式下是否會更加快速,
有許多不同做法,有些摸式是將網路資料暫存於Access,
但如果當使用者是沒有Access時又會有問題,
故此會想採用XML模式去做,
用TADOQuery 或TClientDataSet 其實都可,
但如果要不斷來回查這些資料,才會針對此2元件做效能比較,
感謝sryang 再次補充說明。
===================引 用 sryang 文 章===================
用 TADOQuery 或是 TADODataSet的話,也可以在 Open 之後,先 Last 把合乎條件的資料都抓進記憶體
再把 Connection 屬性設定為 nil,把與資料庫的連結關係切斷
這樣資料還是保留著,接下來再用 Filter 來過濾資料
就可以省掉把資料搬到 TClientDataSet 的功夫
------
程式沒有這麼難
只是還沒打通其中要絕
系統時間:2024-04-25 17:48:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!