![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день!
Использую в работе Delphi XE, всё хорошо и вот недавно возникла проблема перестали работать некоторые циклы. Проект большой, суть его в том имеется таблица значений, столбцов порядка 30, а строк может быть много, от единиц до десятков и сотен тысяч. Строки обрабатываются в циклах и вот некоторые из этих циклов, при количестве итераций больше 32597 строк, перестали работать, то есть программа их просто проскакивает, при этом никаких условий перед циклом нет. Так-же заметил что в некоторых случаях такое возникало когда цикл был не от 0, но тем не менее первое значение цикла было меньше конечного: Код:
procedure SomeProc(FirstRow, LastRow: integer);{FirstRow заведомо меньше LastRow}
var
i: integer;
begin
{Некоторые начальные операции, которых может и не быть}
for i := FirstRow to LastRow do
begin
{операции со строкой i}
end;
end;Временное решение было таким: Код:
procedure SomeProc(FirstRow, LastRow: integer);{FirstRow заведомо меньше LastRow}
var
i, j: integer;
begin
{Некоторые начальные операции, которых может и не быть}
for j := 0 to (LastRow - FirstRow) do
begin
i := FirstRow + j;
{операции со строкой i}
end;
end;В итоге цикл работает при количестве итерации большем 32597. Но был и случай когда цикл уже был от 0: Код:
procedure SomeProc;{FirstRow заведомо меньше LastRow}
var
i: integer;
begin
{Некоторые начальные операции, которых может и не быть}
for i := 0 to RowCount - 1 do
begin
{операции со строкой i}
end;
end;В этом случае, сделал так: Код:
procedure SomeProc;{FirstRow заведомо меньше LastRow}
var
i, j: integer;
begin
{Некоторые начальные операции, которых может и не быть}
for j := 0 to RowCount - 1 do
begin
i := j;
{операции со строкой i}
end;
end;И цикл начал работать. При замене цикла на цикл while всё работает. Оптимизация отключена глобально. В чём тут может быть проблема? |