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

為什么同樣的查詢在PL/SQL Developer中要比Delphi的BDE快?

尚未結案
dust.zhu
一般會員


發表:3
回覆:8
積分:2
註冊:2009-06-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-05-17 14:01:52 IP:221.224.xxx.xxx 訂閱
Oracle資料庫,查詢結果大約有10萬筆記錄,來源多個table;
在PL/SQL Developer中毫秒級就出來結果(雖然只有幾十筆記錄,不是全部,全部取出來好像要30分鐘左右)

在delphi中用BDE,程序直接就死在那了!等了幾分鐘也不見有任何結果,即使用rownum來限制,好像也沒效果

請問各位大大,在Delphi中如何做到pl/sql developer的類似效果?先取出一部分結果顯示,再取后續的所有記錄?
萬分感謝!
編輯記錄
dust.zhu 重新編輯於 2010-05-17 14:06:32, 註解 無‧
bestlong
站務副站長


發表:125
回覆:734
積分:506
註冊:2002-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-05-19 10:10:05 IP:60.248.xxx.xxx 未訂閱
這是你對BDE不夠了解
而且你也沒提到你是用BDE的哪個元件與怎麼設定
建議看 Delphi 4.x 實戰篇2 一書, 有深入說明 TTable 與 TQuery 的運作特性
可以在網路下載到 http://www.sinter.com.tw/codegear/codegear_technique.html

不過 BDE 也是有先天性的缺點
如果不是必需要用的話
建議改用 ADO 或更新的 DBX 技術



------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
Andy Wu
一般會員


發表:17
回覆:25
積分:18
註冊:2004-02-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-05-19 11:29:49 IP:59.124.xxx.xxx 訂閱
如果非得用 BDE,可以增加使用 TClientDataSet + TDataSetProvider 物件

設定 ClientDataSet.PacketRecord 屬性

Description
Use PacketRecords to specify how many records should be contained in a single packet fetched from a provider, or to indicate that the packet returned should contain only metadata

簡單說,一個 Packet 要抓多少 Row 的資料回來

當指標移動到這個 Packet 的最後一筆時,請再下 ClientDataSet.GetNextPacket 抓下一包 Packet 回來
smallfox
高階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-06-12 23:39:17 IP:211.74.xxx.xxx 訂閱
你的 Oracle 是多少版本的?
你使用的 ODBC driver 是 Microsift or Oracle ?
我認為有可能是 Oracle ODBC driver 的問題,
透過 BDE -> ODBC -> Oracle DB 會有存取速度的問題,
特別是 Oracle 9i 以後的版本, 建議更新一下 Oracle ODBC driver 看看.
系統時間:2017-10-24 15:50:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!