1

I have a DBGrid and use it to get data into a Array. But as soon as I press the button to do this procedure I get a StackOverFlow error ? Here is the Code I use :

iRy := 0;

iCol := DBGrid.Columns.Count;

sTest := DBGrid.Columns[0].Field.AsString;

While sTest <> '' do
  begin
   for k := 1 to iCol do
    begin
     arrData[iRy+1,iCol] := DBGrid.Columns[iCol].Field.AsString;
    end;
   Inc(iRy);
   DBGrid.DataSource.DataSet.Next;
   sToets := DBGrid.Columns[0].Field.AsString;
  end;

I am using Delphi 7 .

4

2 回答 2

0

你有几个问题:

  • sTest在初始化之后(循环之前),您永远不会分配其他任何东西
  • 您不断循环遍历同一条记录,因为没有Next,也没有更改sTest. 一旦你开始循环,你就呆在那里。
  • 您将越过 的末尾Columns,因为您将要到达Column.Count,并且最后一个有效索引是Column.Count - 1

试试这个,看看它是否更符合你的要求:

iRy := 0;
sCol := DBGrid.Columns.Count - 1;

// I'm not sure why you're not putting this in the first (0 index) element
// of arrData - is that intentional?
sTest := DBGrid.Columns[0].Field.AsString;

while (sTest <> '') and (not DBGrid.DataSource.DataSet.Eof) do
begin
  for k := 1 to iCol do
    arrData[iRy, iCol] := DBGrid.Columns[iCol].Field.AsString;
  DBGrid.DataSource.DataSet.Next;
  Inc(iRy);
  sTest := DBGrid.Columns[0].Field.AsString; 
end;
于 2013-06-30T14:49:23.450 回答
0

什么时候sTest改变?

堆栈溢出是由堆栈上的内存不足引起的。这个 While 循环将永远存在。您需要在循环中将 sTest 设置为 '' 以外的值,或者您可能打算使用 if 语句。

于 2013-06-30T10:59:50.963 回答