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

ibx之ibdataset與dbgrid一起使用會產生Grid index out of range之錯誤?

答題得分者是:RootKit
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-24 09:21:11 IP:125.224.xxx.xxx 未訂閱
我的form1有IBDatabase1,IBTransaction1,IBDataSet1,DataSource1,dbgrid1,及許多個dbedit,因dbedit只能顯示一筆記錄之各欄位值,所以加入dbgrid以一次顯示多筆記錄,每個dbedit及dbgrid之datasource屬性均指到ibdataset1,form1有一button1其button1click處理程序為

begin
IBTransaction1.rollback;
if ibdataset1.active=false then
ibdataset1.open;
end;

當在runtime時,我click這button1時,ibdataset1之recordcount=2或3或4,端視dbgrid1之height之值,此時若呼叫ibdataset1之Last方法會產生一錯誤訊息:'Grid index out of range',錯誤類別名:'EInvalidGridOperation',且ibdataset1並無移到最後一筆記錄,但若再次呼叫Last方法,ibdataset1才會移到最後一筆記錄,為什麼會這樣呢?


但我把整個程式原始碼拿到另一部電腦重新編譯,並click這button1時,然後在呼叫ibdataset1之Last方法居然不會產生錯誤訊息,且ibdataset1會移到最後一筆記錄,我重覆試了好幾次結果一樣都正常,為什麼會這樣呢?


我兩部電腦之軟體都一樣是
1.windows xp home版(service pack 3),
2.firebird 2.1版 ,
3.delphi 7 pro版 (update1) ,
請問這問題是出在dbgird1元件還是ibdataset1元件還是firebird還是整個delphi之安裝有不正確之地方還是其他原因呢?
編輯記錄
ry_lee 重新編輯於 2009-03-24 09:35:46, 註解 無‧
ry_lee 重新編輯於 2009-03-24 09:42:16, 註解 無‧
ry_lee 重新編輯於 2009-03-24 09:48:34, 註解 無‧
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-24 20:58:40 IP:122.126.xxx.xxx 訂閱
可找 Delphi 源碼 Grid index out of range 搜尋 SIndexOutOfRange 
通常發生在欄位數量超過。
1. 避免自動動態產生欄位。
2. Open 後加 First 看是否改善。

大概判斷,未經深思
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-24 21:26:08 IP:122.126.xxx.xxx 訂閱
或 Open 前先Close 歸位一下
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-25 01:38:10 IP:125.224.xxx.xxx 未訂閱
RootKit 你好:

我知道在open後呼叫next方法或fetchall方法後,在呼叫Last方法就不會有錯誤發生,但呼叫fetchall有重大缺點是會取出全部記錄而影響效率,呼叫next就沒有大問題,我只是不解,為何一部電腦沒這問題,而另一部電腦卻會有.

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