我得到Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
隨機通過電子郵件發送給我在我的網站上。我無法通過強制或一般測試來重現此錯誤,這有點令人困惑。索引超出了ADOQuery的範圍 - 非常隨機
從我在堆棧跟蹤中可以看到的情況來看,它在打開數據集並嘗試獲取值時會隨機發生。堆棧跟蹤顯示調用這個函數時,我得到了錯誤:
function TDB.FGetLastInsertID: Integer;
const
selSQL = 'select scope_identity() as LastID';
var
selCursor: TDataSet;
begin
selCursor := Cursor(selSQL); //Returns a DataSet from a TADOQuery
try
Result := selCursor.FieldByName('LASTID').AsInteger;
finally
selCursor.Close;
selCursor.Free;
end;
end;
正如我所說的,我不能讓這個重現錯誤,它似乎對我運行的任何查詢隨機發生。我嘗試關閉連接,將其設置爲非活動等重現錯誤,但不能。
有沒有人有任何想法?
編輯:這似乎更仔細檢查堆棧跟蹤後,其收盤導致問題:
Stack Trace: at
System.Collections.ArrayList.get_Item(Int32 index) at
Borland.Vcl.TList.Delete(Int32 Index) at Borland.Vcl.TList.Remove(Object Item) at
Borland.Vcl.TDBBufferList.FreeHGlobal(IntPtr Ptr) at
Borland.Vcl.TCustomADODataSet.FreeRecordBuffer(IntPtr& Buffer) at
Borland.Vcl.TDataSet.SetBufListSize(Int32 Value) at
Borland.Vcl.TDataSet.CloseCursor() at
Borland.Vcl.TDataSet.SetActive(Boolean Value) at Borland.Vcl.TDataSet.Close()
EDIT2:我已經把支票代碼selCursor.Close之前,以確保selCursor.Active
。堆棧跟蹤表明沒有任何關閉。
請問這是什麼「光標()」的東西?從什麼時候開始使用Delphi?我可以在網上的任何地方閱讀嗎? – 2011-06-02 12:23:51
它是一個返回一個打開的數據集的自定義函數。 – webnoob 2011-06-02 12:44:06
對,謝謝!我確實懷疑這一點,但是,不,爲什麼,我開始認爲這是最新版本中的一項新功能。 – 2011-06-02 12:52:41