Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

Не завершается цикл 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.042 c
15-1178615955
Jan1
2007-05-08 13:19
2007.06.03
Защита программы от крэка


9-1152542077
VolanD666
2006-07-10 18:34
2007.06.03
Задачка по математике


11-1160821604
vampir_infernal
2006-10-14 14:26
2007.06.03
Exception, TNotifyEvent и не только


8-1159045145
Brandik
2006-09-24 00:59
2007.06.03
Считывание BMP изображения и перевод в массив


15-1178198046
Антон Г.
2007-05-03 17:14
2007.06.03
Беплатный хостинг