我Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
在我的网站上随机通过电子邮件发送给我。我无法通过强制或一般测试重现此错误,这有点令人困惑。
从我在堆栈跟踪中可以看到,它在打开数据集并尝试获取值时随机发生。堆栈跟踪显示调用此函数时出现错误:
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.Active
在 selCursor.Close 之前。堆栈跟踪表明没有什么可以关闭的。