Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.1 c
15-1178564140
iZEN
2007-05-07 22:55
2007.06.03
Ой чо деется, Microsoft торгует Линуксом!


2-1179137910
FIL-23
2007-05-14 14:18
2007.06.03
как подать звук на спикер из под XP


2-1179296069
StriderMan
2007-05-16 10:14
2007.06.03
проблема с большими строковыми константами


15-1178492643
Real
2007-05-07 03:04
2007.06.03
C Днем Радио!!!


1-1175846980
Bless
2007-04-06 12:09
2007.06.03
зачем нужно TInterfacedObject(Result).FRefCount := 1 ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский