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

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

Как сделать групповую операцию над ADODataSet?


iviom ©   (2007-01-24 11:39:00) 

Есть чековая колонка в ADODataSet. Особой ценности не несет, просто пользователь может для себя выделить несколько строк. Хочу незаметно для пользователя убрирать иногда эти галочки. Для этого надо в иделе пройтись по DataSet и поставить значение false в соответствующую колонку. Но когда идешь по датасету средствами

AdoDataSet.First;
while not ADoDataSet.eof do
begin
...
ADoDataSet.Next;
end;

менятется Locate и это отражается в таблице. Как этого избежать?


Павел Калугин   (2007-01-25 10:40:00) [1]

> [17] Johnmen ©   (24.01.07 15:44)

не понял..

try //блок для цикла и букмарка начало
   try //блок для цикла начало
     While do begin
       .........
      end;
   finally //блок для цикла конец
      GotoBookmark()
   end;
finally //блок для цикла и букмарка начало конец
EnableControls;
end;

//блок для цикла и букмарка
и есть та отдельная дополнительная "обертка"


Johnmen   (2007-01-24 15:44:00) [2]


> Павел Калугин ©   (24.01.07 15:23) [16]
> а то, что Олег ниже сделал. отдельно его "обернуть"


А ты что?
И Олег отдельно не оборачивал.


Павел Калугин   (2007-01-24 15:23:00) [3]

> [14] Johnmen ©   (24.01.07 14:54)

а то, что Олег ниже сделал. отдельно его "обернуть"
> [15] Ega23 ©   (24.01.07 14:54)

вполне


Ega23   (2007-01-24 14:54:00) [4]


> угу.. и тогда пользователь легко вдруг "перепрыгнет" непонятно
> куда, вместо того чтобы остатся на месте если ошибка возникнет
> чуть раньше GotoBookmark


Блин, ну вы привередливые...

Так устроит?  :)


try
try
  While do begin
    .........
   end;
finally
 GotoBookmark()
end;
finally
EnableControls;
end;


Johnmen   (2007-01-24 14:54:00) [5]


> Павел Калугин ©   (24.01.07 14:49) [13]


А если ошибка возникнет на GotoBookmark? Что тогда?


Павел Калугин   (2007-01-24 14:49:00) [6]

> [12] Ega23 ©   (24.01.07 14:44)

угу.. и тогда пользователь легко вдруг "перепрыгнет" непонятно куда, вместо того чтобы остатся на месте если ошибка возникнет чуть раньше GotoBookmark


Ega23   (2007-01-24 14:44:00) [7]


> Я говорю не про EnableControls, а про GotoBookmark.


А. Ну тогда - да. Его, конечно, надо перед finally ставить.


Johnmen   (2007-01-24 14:41:00) [8]

Я говорю не про EnableControls, а про GotoBookmark.


Ega23   (2007-01-24 14:32:00) [9]

while not ADoDataSet.eof do
begin
...
ADoDataSet.Next;
end;


А где, пардон, гарантия, что в этих самых ... не может исключения произойти? И оно будет должным образом обработано?
Лично я EnableControls предпочитаю в finally поставить.
Мало-ли что...


Johnmen   (2007-01-24 14:28:00) [10]


> Ega23 ©   (24.01.07 12:41) [8]
> Почему? Мало-ли что у него в цикле произойти может?


Наверное потому, что я думаю о людях слишком хорошо.
И в данном случае, что цикл написан верно, как и прочие моменты.


Ega23   (2007-01-24 12:41:00) [11]


> Зачем нужен такой трай блок, если ошибка может быть только
> в GotoBookmark?


Почему? Мало-ли что у него в цикле произойти может? А вот обратно EnableControls не восстановишь - всё, приплыли.


iviom   (2007-01-24 12:35:00) [12]


> кстати это не есть хорошо, когда поведение программы не контролируется пользователем. Пользователей очень раздражает когда программа втихую сама что-то меняет.


Да, нет. Там будет не незаметно, убираться, а когда это не нужно. Просто объяснить толком не получилось. Он галочками выделяет поля, по которым надо считать сумму. А потом раз - и фильтранул гридом. А сумма не изменная. А полей в два раза меньше. И сидит, он, умный человек, и не поймет откуда такая огромная сумма взялась..


Johnmen   (2007-01-24 12:22:00) [13]


> truegosha   (24.01.07 11:48) [2]


Зачем нужен такой трай блок, если ошибка может быть только в GotoBookmark?


alex_***   (2007-01-24 12:02:00) [14]

кстати это не есть хорошо, когда поведение программы не контролируется пользователем. Пользователей очень раздражает когда программа втихую сама что-то меняет.


> незаметно для пользователя убрирать иногда эти галочки


Представляю как будет биться об клаву головой какой-ть бухгалтер в последний день сдачи месячной отчетности в 10 часов вечера, после 10-й попытки поставить нужные галочки :)


Ega23   (2007-01-24 11:53:00) [15]


> Ух ты и правда работает =). Спсибо.
>


только не забудь в блоке finally EnableControls обязательно поставить


iviom   (2007-01-24 11:48:00) [16]

>DisableControls

Ух ты и правда работает =). Спсибо.


truegosha   (2007-01-24 11:48:00) [17]

var
  SavePlace: TBookmark;
...

try
SavePlace := AdoDataSet.GetBookmark;
AdoDataSet.DisableControls;
AdoDataSet.First;
while not ADoDataSet.eof do
begin
...
ADoDataSet.Next;
end;
finally
 AdoDataSet.GotoBookmark(SavePlace);
 AdoDataSet.FreeBookmark(SavePlace);
 AdoDataSet.EnableControls;
end;


alex_***   (2007-01-24 11:42:00) [18]

DisableControls


Наверх

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