Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не завершается цикл while


Страницы:   1 2

Slimer ©   (2007-05-16 22:34:00) 

пишу такой код:

with table1 do
begin
  first;
    while not table1.eof do
      begin
        edit;
        fileldbyname('col').value:=fileldbyname('col').value+nadbavka;
        post;
        next;
      end;
end;


В итоге после изменения последней записи цикл не завершается, а продолжает добавлять надбавку.
Почему так?


Desdechado   (2007-05-17 11:22:00) [1]

> Скорее всего это гримасы with
> сначала было with table1
> потом зачем-то явно table1.eof
Там же один with, а не два. Хотя действительно бессмысленно делать винегрет.


Alex_C   (2007-05-17 10:34:00) [2]


> > Скорее всего это гримасы with
>
> хм... правда, может быть такое?
> не зря я этот with не люблю...


Очень распростаненный глюк With именно с table.next (next принемается как Form.next)! C другими операторами все ок!


clickmaker   (2007-05-17 10:25:00) [3]


> Скорее всего это гримасы with

хм... правда, может быть такое?
не зря я этот with не люблю...


Reindeer Moss Eater   (2007-05-17 10:07:00) [4]

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


G_M_S   (2007-05-17 10:01:00) [5]


> Slimer ©   (16.05.07 23:33) [15]
> Поскольку даже ума не приложу в чем может быть проблемма
> с while, оставлю с for.Как всегда будем надеяться что не
> подкачает:)

Делай после открытия датасета FetchAll - тогда точно не подкачает, количество в RecordCount будет правильным.


Германн   (2007-05-17 02:31:00) [6]


> Anatoly Podgoretsky ©   (17.05.07 00:12) [16]
>
> > Slimer  (16.05.2007 23:33:15)  [15]
>
> И не надейся, законы Паркинсона никому не удалось преодолеть.
>
>

А есть ещё и законы Мерфи! :)
Так что никакой надежды быть не может! Ну разве что на русский авось!
:)


Anatoly Podgoretsky   (2007-05-17 00:12:00) [7]

> Slimer  (16.05.2007 23:33:15)  [15]

И не надейся, законы Паркинсона никому не удалось преодолеть.


Slimer   (2007-05-16 23:33:00) [8]

Поскольку даже ума не приложу в чем может быть проблемма с while, оставлю с for.
Как всегда будем надеяться что не подкачает:)


Loginov Dmitry   (2007-05-16 23:29:00) [9]

> Я использовал for и RecordCount. Заработало, но что-то внутри
> подсказывает, что использовать while было бы правильней


И то правда. For не всегда канает. Стандартные компоненты для работы с БД InterBase не определят число записей, пока в них не зальешь все строки таблицы.


Slimer   (2007-05-16 23:20:00) [10]


> Проверь, какие обработчики могу вызывать данный код. Может
> OnChange у поля Col. Может Before[After]Event и т.п.

Я так понимаю что если бы процедура вызывалась повторно, то изменялись бы все записи  с первой, а так останавливается на последней записи и добавляет ей надбавку без остановок


Slimer   (2007-05-16 23:16:00) [11]

//        fileldbyname('col').value:=fileldbyname('col').value+nadbavka;

так завершается а с редактированием - нет.
Я использовал for и RecordCount. Заработало, но что-то внутри подсказывает, что использовать while было бы правильней


Loginov Dmitry   (2007-05-16 23:12:00) [12]

Проверь, какие обработчики могу вызывать данный код. Может OnChange у поля Col. Может Before[After]Event и т.п.


> Может delphi глючит?


Практически глюки Delphi проявляются в 99.99% случаев в невозможности скомпилировать заданный код. Но если компиляция прошла успешно - все ошибки - это глюки самого программиста. За крайне-крайне редким исключением. Так что и думать про это забудь.


Anatoly Podgoretsky   (2007-05-16 23:09:00) [13]

Проверяется легко

//        fileldbyname('col').value:=fileldbyname('col').value+nadbavka;


Anatoly Podgoretsky   (2007-05-16 23:08:00) [14]

Тогда цикл должен завершаться.


Slimer   (2007-05-16 23:05:00) [15]


> А ты ответь на вопрос про сортировку


нет. сортировка не применяется


Anatoly Podgoretsky   (2007-05-16 23:02:00) [16]


> Может delphi глючит?

Это последнее о чем надо думать, как правило все наоборот.


Anatoly Podgoretsky   (2007-05-16 23:01:00) [17]

> Slimer  (16.05.2007 22:50:05)  [5]

А ты ответь на вопрос про сортировку


Slimer   (2007-05-16 22:50:00) [18]


> Anatoly Podgoretsky ©   (16.05.07 22:47) [4]

Т.е. вы хотите сказать что цыкл не завершается потому что происходит редактирование записи? Почему так?


Anatoly Podgoretsky   (2007-05-16 22:47:00) [19]

> Slimer  (16.05.2007 22:42:02)  [2]

А здесь нет изменения поля 'col'


Slimer   (2007-05-16 22:43:00) [20]

Может delphi глючит?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо