填充2D数组的最佳方式是什么?

72qzrwbm  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(159)

我试图使用数据库(Access)中的数据填充数组,但在运行以下代码时:

with dmSUPREMEDATA do
begin
  iNumberofRecords := ADOComplete.RecordCount;
  ADOComplete.First;
  SetLength(ArrSummary, iNumberofRecords, 3);
  for i := 0 to iNumberofRecords do
  begin
    ArrSummary[i, 0] := ADOComplete['Names'];
    ArrSummary[i, 1] := ADOComplete['Surnames'];
    ArrSummary[i, 2] := ADOComplete['Average'];
    ADOComplete.Next;
  end;
end;

这是弹出的错误:

有没有更好的方法来填充数组?这是用Delphi编写的

h9a6wy2h

h9a6wy2h1#

您的循环超出了数组的界限。

数组的第一维具有iNumberofRecords数量的元素,因此它具有有效的索引0..iNumberofRecords-1for循环使用的索引是INCLUDE,因此您将遍历索引0..iNumberofRecords,这意味着循环的最终迭代将访问无效的索引。

您需要从循环计数器中减去-1,例如:

for i := 0 to iNumberofRecords-1 do

或者:

for i := 0 to Pred(iNumberofRecords) do
h79rfbju

h79rfbju2#

您可以尝试创建两个for循环。就像一个细节和子细节,一个用于第一个数组,另一个用于第二个数组。

var arr2d := array of array of string;

SetLength(arr2d, 5, 5);

for var i := 0 to Length(arr2d) - 1 do
begin
  for var j := 0 to Length(arr2d) - 1 do
    arr2d[i][j] := 'Text [' + i.ToString + '][' + j.toString + ']';
end

相关问题