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

Grid Index out of range??

尚未結案
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-13 14:00:05 IP:67.124.xxx.xxx 未訂閱
請教先進..遇到grid index out of range 應該如何解決? 多謝
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-13 14:21:13 IP:218.16.xxx.xxx 未訂閱
grid index out of range 的成因是你給大過/等於 Count (Row 或 Col) 的 index 來存取 基本上 index 一次是 0 到 Count - 1 的數值,所以解決的方法就是不要用比0小或大過/等於 Count的 index 數囉。 若你還不知道問題出處請 Post 引至錯誤的 Code
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-13 15:50:05 IP:61.66.xxx.xxx 未訂閱
引言: 請教先進..遇到grid index out of range 應該如何解決? 多謝
1.這應該是你的table 有index才會發生, 不知道你出現的是否是這個錯誤畫面 (如果看不到圖, 請點 http://delphi.ktop.com.tw/forum.asp?FORUM_ID=130看, 我不太會貼圖) 如果是, 那是你用滑鼠點到紅框所在的Inditator 位置會發生, 原因我也在查 -不明(如果沒有索引則不會), 現在我也查不到點到那個地方所會觸發的行為? 2.如果不是, 則應該是index有問題, 試著重建index看看, 3.當然沒有實際看到完整的操作不容易斷言, 不過大致上是上述兩種情況! 發表人 - P.D. 於 2003/04/13 15:55:42
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-14 11:08:19 IP:63.201.xxx.xxx 未訂閱
多謝前輩指引,我現在查是否如PD先生說的INDEX出問題,我當時的情形是我要輸入一筆資料但一半後為存檔就點選其他page view data後再轉回此頁點選scroll bar就出顯此訊息,會是delphi7的bug?? 多謝
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-14 12:22:35 IP:218.16.xxx.xxx 未訂閱
查看一下你有沒有 DBGrid 事件引至跳出可接受範圍
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-14 13:18:04 IP:63.201.xxx.xxx 未訂閱
引言 :查看一下你有沒有 DBGrid 事件引至跳出可接受範圍 版主先生..我在本page的dbgrid只有兩個事件被引用onkeypress與oncolexit 分別處理enter鍵與查核是否重複鍵值而已,因此不知道你所謂的接受範圍是何 多謝,另外我run另一支程式時出現list index out of bound(0),又是為何?? 我使用F7的方式追蹤問題出現在form create,程式如下 procedure TQuery_OPlist.FormCreate(Sender: TObject); var I : Integer; ProdName : String; begin DataModule1.AQ_RDOPlist.Open; DataModule1.AT_RDProdName.close; DataModule1.AT_RDProdName.Open; DataModule1.AT_RDMaster.Open; DataModule1.DS_RDMasterAQ.dataset := DataModule1.AT_RDMaster; PageControl_RDMain.ActivePage := TabSheet_RDMain; ActiveDS.Dataset := DataModule1.AQ_RDOPList; with DataModule1.AT_RDProdName do begin For I :=0 to RecordCount - 1 do begin ProdName := Fields[1].AsString; ComboBox1.Items.Add(ProdName); next; end; end; end; 是乎出現在combobox無法寫入資料. 多謝
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-14 13:31:15 IP:211.74.xxx.xxx 未訂閱
改成這樣 ComboBox1.Style:=csDropDown;//可加入資料 with DataModule1.AT_RDProdName do begin for I := 0 to RecordCount - 1 do begin ProdName := Fields[I].AsString; ComboBox1.Items.Add(ProdName); // next;//這一行不用了 end; end; ComboBox1.Style:=csDropDownList;//不可加入資料 另外ComboBox1.Style不能設為csDropDownList,否則資料加不進去喔...TRY TRY SEE
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-14 13:32:46 IP:218.16.xxx.xxx 未訂閱
是否只有一欄資料,若是的話應是 field[0].AsString (根本沒有 field[1] 所以 index out of bound)
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-14 13:37:45 IP:63.201.xxx.xxx 未訂閱
多謝chih,但是我查過我的combobox.style為csdropdown,我同樣的程式於另一form運行正常.因此我想問題可能不是如此 多謝
skp
一般會員


發表:14
回覆:19
積分:6
註冊:2002-11-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-14 14:11:56 IP:218.103.xxx.xxx 未訂閱
我曾經過也遇過一個同樣的問題,最後發現原來在之前Hide了一個Row,所以導致Index out of grid,解決方法: Unhide all row. 試試看..
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-15 12:51:29 IP:67.124.xxx.xxx 未訂閱
各位先進..我查過程式既沒有index也沒有隱藏的欄位.出現的訊息是list index out of bound(0),我後端是SQLServer,我實在不清楚問題何在,此表單 是查詢的表單因此均使用adoquery.出現錯誤訊息的時機是當form開啟時以及 點選dbgrid,程式如下 unit Q_RDOPList; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, StdCtrls, ComCtrls, Buttons; type TQuery_OPlist = class(TForm) DBNavigator1: TDBNavigator; PageControl_RDMain: TPageControl; TabSheet_RDDetail: TTabSheet; TabSheet_OPCondition: TTabSheet; TabSheet_Evaluation: TTabSheet; TabSheet_RDMain: TTabSheet; Label1_CodeNo: TLabel; Label2_RefNo: TLabel; Label3_PD: TLabel; Label4_SD: TLabel; Label5_PRID: TLabel; Label6_PRLD: TLabel; Label7_CD: TLabel; DBText1_CodeNo: TDBText; DBText2_RFNO: TDBText; DBText3_PD: TDBText; DBText4_SD: TDBText; DBText5_PID: TDBText; DBText6_PDLD: TDBText; DBText7_CD: TDBText; DBGrid_Evaluation: TDBGrid; DBGrid_OPCondition: TDBGrid; DBGrid_Ingredient: TDBGrid; Label_Title: TLabel; Label_Title2: TLabel; Image1: TImage; BitBtn1: TBitBtn; ActiveDS: TDataSource; StatusBar1: TStatusBar; DBGrid_RDOPList: TDBGrid; ComboBox1: TComboBox; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure DBGrid_IngredientDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure BitBtn1Click(Sender: TObject); procedure ComboBox1Click(Sender: TObject); procedure ActiveDSStateChange(Sender: TObject); procedure PageControl_RDMainChange(Sender: TObject); procedure DBGrid_RDOPListEnter(Sender: TObject); private { Private declarations } public { Public declarations } end; var Query_OPlist: TQuery_OPlist; implementation uses VFF_MIS_DataModule2; var R_ProdID : String; C_KeyValue : String; FindResult : Variant; SQLStr : String; Const DatasetStates : array[TDatasetState] of string = ('Not Active','Browsing','Editing','Inserting','','','','','','','','',''); HelpTopicEdit = 2; HelpTopicBrowse = 3; {$R *.dfm} procedure TQuery_OPlist.ActiveDSStateChange(Sender: TObject); begin try with ActiveDS do if Dataset <> nil then Statusbar1.Panels[0].Text := Format('[%S:%S]',[Dataset.Name,DatasetStates[State]]); except Statusbar1.Panels[0].Text := 'UnKnow State'; end; end; procedure TQuery_OPlist.FormCreate(Sender: TObject); var I : Integer; ProdName : String; begin DataModule2.AQ_RDOPlist_2.Open; DataModule2.AT_RDProdName_2.Open; DataModule2.AT_RDMaster_2.Open; PageControl_RDMain.ActivePage := TabSheet_RDMain; ActiveDS.Dataset := DataModule2.AQ_RDOPList_2; with DataModule2.AT_RDProdName_2 do begin For I :=0 to RecordCount - 1 do begin ProdName := Fields[1].AsString; ComboBox1.Items.Add(ProdName); next; end; end; end; procedure TQuery_OPlist.ComboBox1Click(Sender: TObject); begin DataModule2.AT_RDProdName_2.close; DataModule2.AT_RDProdName_2.Open; C_KeyValue := ''; C_KeyValue := ComboBox1.Text; FindResult := DataModule2.AT_RDProdName_2.Lookup('ProductName',C_KeyValue,'ProductID'); If not varisnull(FindResult) then R_ProdID := VartoStr(FindResult) else R_ProdID := '' ; With DataModule2.AQ_RDOPlist_2 do begin Close; SQL.Clear; SQLStr := 'Select * from A_RDOPList where ProductID like ' '''' TrimRight(R_ProdID) '%' ''''; SQL.Add(SQLStr); Prepared; Open; end; end; procedure TQuery_OPlist.PageControl_RDMainChange(Sender: TObject); begin case PageControl_RDMain.ActivePageIndex of 3 : begin ActiveDS.DataSet := DataModule2.AT_RDMaster_2; end; 1 : begin ActiveDS.DataSet := DataModule2.AQ_RDOPCondition_2; DataModule2.AQ_RDOPCondition_2.Close; DataModule2.AQ_RDOPCondition_2.Open; end; 2 : begin ActiveDS.DataSet := DataModule2.AQ_RDEvaluation_2; DataModule2.AQ_RDEvaluation_2.Close; DataModule2.AQ_RDEvaluation_2.Open; end; 0 : begin ActiveDS.DataSet := DataModule2.AQ_RDDetail_2; DataModule2.AQ_RDDetail_2.Close; DataModule2.AQ_RDDetail_2.Open; end; end; end; procedure TQuery_OPlist.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; procedure TQuery_OPlist.DBGrid_RDOPListEnter(Sender: TObject); begin ActiveDS.Dataset := DataModule2.AQ_RDOPList_2; end; procedure TQuery_OPlist.DBGrid_IngredientDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (DataModule2.AQ_RDDetail_2.FieldByName('Adj_Weight').AsFloat <> 0) then begin DBGrid_Ingredient.Canvas.Font.Color := clred; DBGrid_Ingredient.DefaultDrawColumnCell(rect,datacol,column,[]); end; end; procedure TQuery_OPlist.BitBtn1Click(Sender: TObject); begin close; end; end.
系統時間:2024-11-23 2:24:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!