Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизНе завершается цикл while Найти похожие ветки
← →
Slimer © (2007-05-16 22:34) [0]пишу такой код:
with table1 do
begin
first;
while not table1.eof do
begin
edit;
fileldbyname("col").value:=fileldbyname("col").value+nadbavka;
post;
next;
end;
end;
В итоге после изменения последней записи цикл не завершается, а продолжает добавлять надбавку.
Почему так?
← →
Loginov Dmitry © (2007-05-16 22:40) [1]В приведенном коде ошибки нет. Ищи ее в другом месте.
Проверь, нет ли сортировки по полю COL.
← →
Slimer © (2007-05-16 22:42) [2]В том то и дело, что аналогично подсчитываю сумму и цикл завершается
with table1 do
begin
first;
while not table1.eof do
begin
summ:=summ+fileldbyname("col").value;
next;
end;
end;
← →
Slimer © (2007-05-16 22:43) [3]Может delphi глючит?
← →
Anatoly Podgoretsky © (2007-05-16 22:47) [4]> Slimer (16.05.2007 22:42:02) [2]
А здесь нет изменения поля "col"
← →
Slimer © (2007-05-16 22:50) [5]
> Anatoly Podgoretsky © (16.05.07 22:47) [4]
Т.е. вы хотите сказать что цыкл не завершается потому что происходит редактирование записи? Почему так?
← →
Anatoly Podgoretsky © (2007-05-16 23:01) [6]> Slimer (16.05.2007 22:50:05) [5]
А ты ответь на вопрос про сортировку
← →
Anatoly Podgoretsky © (2007-05-16 23:02) [7]
> Может delphi глючит?
Это последнее о чем надо думать, как правило все наоборот.
← →
Slimer © (2007-05-16 23:05) [8]
> А ты ответь на вопрос про сортировку
нет. сортировка не применяется
← →
Anatoly Podgoretsky © (2007-05-16 23:08) [9]Тогда цикл должен завершаться.
← →
Anatoly Podgoretsky © (2007-05-16 23:09) [10]Проверяется легко
// fileldbyname("col").value:=fileldbyname("col").value+nadbavka;
← →
Loginov Dmitry © (2007-05-16 23:12) [11]Проверь, какие обработчики могу вызывать данный код. Может OnChange у поля Col. Может Before[After]Event и т.п.
> Может delphi глючит?
Практически глюки Delphi проявляются в 99.99% случаев в невозможности скомпилировать заданный код. Но если компиляция прошла успешно - все ошибки - это глюки самого программиста. За крайне-крайне редким исключением. Так что и думать про это забудь.
← →
Slimer © (2007-05-16 23:16) [12]
// fileldbyname("col").value:=fileldbyname("col").value+nadbavka;
так завершается а с редактированием - нет.
Я использовал for и RecordCount. Заработало, но что-то внутри подсказывает, что использовать while было бы правильней
← →
Slimer © (2007-05-16 23:20) [13]
> Проверь, какие обработчики могу вызывать данный код. Может
> OnChange у поля Col. Может Before[After]Event и т.п.
Я так понимаю что если бы процедура вызывалась повторно, то изменялись бы все записи с первой, а так останавливается на последней записи и добавляет ей надбавку без остановок
← →
Loginov Dmitry © (2007-05-16 23:29) [14]> Я использовал for и RecordCount. Заработало, но что-то внутри
> подсказывает, что использовать while было бы правильней
И то правда. For не всегда канает. Стандартные компоненты для работы с БД InterBase не определят число записей, пока в них не зальешь все строки таблицы.
← →
Slimer © (2007-05-16 23:33) [15]Поскольку даже ума не приложу в чем может быть проблемма с while, оставлю с for.
Как всегда будем надеяться что не подкачает:)
← →
Anatoly Podgoretsky © (2007-05-17 00:12) [16]> Slimer (16.05.2007 23:33:15) [15]
И не надейся, законы Паркинсона никому не удалось преодолеть.
← →
Германн © (2007-05-17 02:31) [17]
> Anatoly Podgoretsky © (17.05.07 00:12) [16]
>
> > Slimer (16.05.2007 23:33:15) [15]
>
> И не надейся, законы Паркинсона никому не удалось преодолеть.
>
>
А есть ещё и законы Мерфи! :)
Так что никакой надежды быть не может! Ну разве что на русский авось!
:)
← →
G_M_S © (2007-05-17 10:01) [18]
> Slimer © (16.05.07 23:33) [15]
> Поскольку даже ума не приложу в чем может быть проблемма
> с while, оставлю с for.Как всегда будем надеяться что не
> подкачает:)
Делай после открытия датасета FetchAll - тогда точно не подкачает, количество в RecordCount будет правильным.
← →
Reindeer Moss Eater © (2007-05-17 10:07) [19]with table1 do
begin
first;
while not table1.eof do
begin
edit;
fileldbyname("col").value:=fileldbyname("col").value+nadbavka;
post;
next;
end;
end;
Скорее всего это гримасы with
сначала было with table1
потом зачем-то явно table1.eof
и как результат - компилер решил, что next это метод формы, а не метод table1
← →
clickmaker © (2007-05-17 10:25) [20]
> Скорее всего это гримасы with
хм... правда, может быть такое?
не зря я этот with не люблю...
← →
Alex_C © (2007-05-17 10:34) [21]
> > Скорее всего это гримасы with
>
> хм... правда, может быть такое?
> не зря я этот with не люблю...
Очень распростаненный глюк With именно с table.next (next принемается как Form.next)! C другими операторами все ок!
← →
Desdechado © (2007-05-17 11:22) [22]> Скорее всего это гримасы with
> сначала было with table1
> потом зачем-то явно table1.eof
Там же один with, а не два. Хотя действительно бессмысленно делать винегрет.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.071 c