請教有關 "陣列索引超出界限" 該如何處理 |
答題得分者是:wscken
|
yish35
一般會員 發表:5 回覆:29 積分:6 註冊:2007-01-10 發送簡訊給我 |
請教各位大大:
以下程式,會在 if Contacts.items[k].hobby ='FromAD' then 或是 Contacts.items.remove(k) 發生錯誤,錯誤,並不是多筆刪除才會,而是刪到700多以下就會開始發生,請教各位,是否有什麼辦法可以解決 錯誤訊息為 "陣列索引超出界限" [code delphi] USES COMOBJ; Var K:INTEGER; BEGIN OutlookApp := CreateOleObject('Outlook.Application'); MAPI:= OutlookApp.GetNamespace('MAPI'); Contacts:= Mapi.Folders('NEW CO').Folders('連絡人'); //===================================================== edit1.text:='資料刪除中'; //==================把我們建的資料刪除================== if contacts.items.count=0 then //判斷是否為第一筆 begin edit1.text:='空白資料庫'; end else begin for k := 1 to contacts.items.count do begin //======================================================= if Contacts.items[k].hobby ='FromAD' then // begin // //把資料刪掉 // Contacts.items.remove(k) // end; //裏面的IF // //====================================================== end; //for // end; //外面的if edit1.text:='資料刪除完畢'; [/code]
------
環境 DELPHI 7 Delphi 新手,請多指教 |
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
因為你刪掉item 後,item 的 count 已經減少了。但for 迴圈還是用原來的數字在跑迴圈,到最後一定會超過陣列的索引值的。
試著改用 while 迴圈來看看 [code cpp] k:=1; while k <= to contacts.items.count do begin if Contacts.items[k].hobby ='FromAD' then Contacts.items.remove(k) else k:=k 1; end; [/code] 我沒實際測試過,大致上是這樣,你自己再試看看 ===================引 用 yish35 文 章=================== 請教各位大大: 以下程式,會在 if Contacts.items[k].hobby ='FromAD' then 或是 Contacts.items.remove(k) 發生錯誤,錯誤,並不是多筆刪除才會,而是刪到700多以下就會開始發生,請教各位,是否有什麼辦法可以解決 錯誤訊息為 "陣列索引超出界限" [code delphi] USES COMOBJ; Var K:INTEGER; BEGIN OutlookApp := CreateOleObject('Outlook.Application'); MAPI:= OutlookApp.GetNamespace('MAPI'); Contacts:= Mapi.Folders('NEW CO').Folders('連絡人'); //===================================================== edit1.text:='資料刪除中'; //==================把我們建的資料刪除================== if contacts.items.count=0 then //判斷是否為第一筆 begin edit1.text:='空白資料庫'; end else begin for k := 1 to contacts.items.count do begin //======================================================= if Contacts.items[k].hobby ='FromAD' then // begin // //把資料刪掉 // Contacts.items.remove(k) // end; //裏面的IF // //====================================================== end; //for // end; //外面的if edit1.text:='資料刪除完畢'; [/code] |
yish35
一般會員 發表:5 回覆:29 積分:6 註冊:2007-01-10 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
yish35
一般會員 發表:5 回覆:29 積分:6 註冊:2007-01-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |