![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать групповую операцию над 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