Форум: "Базы";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизКак сделать групповую операцию над ADODataSet? Найти похожие ветки
← →
iviom (2007-01-24 11:39) [0]Есть чековая колонка в ADODataSet. Особой ценности не несет, просто пользователь может для себя выделить несколько строк. Хочу незаметно для пользователя убрирать иногда эти галочки. Для этого надо в иделе пройтись по DataSet и поставить значение false в соответствующую колонку. Но когда идешь по датасету средствами
AdoDataSet.First;
while not ADoDataSet.eof do
begin
...
ADoDataSet.Next;
end;
менятется Locate и это отражается в таблице. Как этого избежать?
← →
alex_*** © (2007-01-24 11:42) [1]DisableControls
← →
truegosha (2007-01-24 11:48) [2]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;
← →
iviom (2007-01-24 11:48) [3]>DisableControls
Ух ты и правда работает =). Спсибо.
← →
Ega23 © (2007-01-24 11:53) [4]
> Ух ты и правда работает =). Спсибо.
>
только не забудь в блоке finally EnableControls обязательно поставить
← →
alex_*** © (2007-01-24 12:02) [5]кстати это не есть хорошо, когда поведение программы не контролируется пользователем. Пользователей очень раздражает когда программа втихую сама что-то меняет.
> незаметно для пользователя убрирать иногда эти галочки
Представляю как будет биться об клаву головой какой-ть бухгалтер в последний день сдачи месячной отчетности в 10 часов вечера, после 10-й попытки поставить нужные галочки :)
← →
Johnmen © (2007-01-24 12:22) [6]
> truegosha (24.01.07 11:48) [2]
Зачем нужен такой трай блок, если ошибка может быть только в GotoBookmark?
← →
iviom (2007-01-24 12:35) [7]
> кстати это не есть хорошо, когда поведение программы не контролируется пользователем. Пользователей очень раздражает когда программа втихую сама что-то меняет.
Да, нет. Там будет не незаметно, убираться, а когда это не нужно. Просто объяснить толком не получилось. Он галочками выделяет поля, по которым надо считать сумму. А потом раз - и фильтранул гридом. А сумма не изменная. А полей в два раза меньше. И сидит, он, умный человек, и не поймет откуда такая огромная сумма взялась..
← →
Ega23 © (2007-01-24 12:41) [8]
> Зачем нужен такой трай блок, если ошибка может быть только
> в GotoBookmark?
Почему? Мало-ли что у него в цикле произойти может? А вот обратно EnableControls не восстановишь - всё, приплыли.
← →
Johnmen © (2007-01-24 14:28) [9]
> Ega23 © (24.01.07 12:41) [8]
> Почему? Мало-ли что у него в цикле произойти может?
Наверное потому, что я думаю о людях слишком хорошо.
И в данном случае, что цикл написан верно, как и прочие моменты.
← →
Ega23 © (2007-01-24 14:32) [10]
while not ADoDataSet.eof do
begin
...
ADoDataSet.Next;
end;
А где, пардон, гарантия, что в этих самых ... не может исключения произойти? И оно будет должным образом обработано?
Лично я EnableControls предпочитаю в finally поставить.
Мало-ли что...
← →
Johnmen © (2007-01-24 14:41) [11]Я говорю не про EnableControls, а про GotoBookmark.
← →
Ega23 © (2007-01-24 14:44) [12]
> Я говорю не про EnableControls, а про GotoBookmark.
А. Ну тогда - да. Его, конечно, надо перед finally ставить.
← →
Павел Калугин © (2007-01-24 14:49) [13]> [12] Ega23 © (24.01.07 14:44)
угу.. и тогда пользователь легко вдруг "перепрыгнет" непонятно куда, вместо того чтобы остатся на месте если ошибка возникнет чуть раньше GotoBookmark
← →
Johnmen © (2007-01-24 14:54) [14]
> Павел Калугин © (24.01.07 14:49) [13]
А если ошибка возникнет на GotoBookmark? Что тогда?
← →
Ega23 © (2007-01-24 14:54) [15]
> угу.. и тогда пользователь легко вдруг "перепрыгнет" непонятно
> куда, вместо того чтобы остатся на месте если ошибка возникнет
> чуть раньше GotoBookmark
Блин, ну вы привередливые...
Так устроит? :)
try
try
While do begin
.........
end;
finally
GotoBookmark()
end;
finally
EnableControls;
end;
← →
Павел Калугин © (2007-01-24 15:23) [16]> [14] Johnmen © (24.01.07 14:54)
а то, что Олег ниже сделал. отдельно его "обернуть"
> [15] Ega23 © (24.01.07 14:54)
вполне
← →
Johnmen © (2007-01-24 15:44) [17]
> Павел Калугин © (24.01.07 15:23) [16]
> а то, что Олег ниже сделал. отдельно его "обернуть"
А ты что?
И Олег отдельно не оборачивал.
← →
Павел Калугин © (2007-01-25 10:40) [18]> [17] Johnmen © (24.01.07 15:44)
не понял..
try //блок для цикла и букмарка начало
try //блок для цикла начало
While do begin
.........
end;
finally //блок для цикла конец
GotoBookmark()
end;
finally //блок для цикла и букмарка начало конец
EnableControls;
end;
//блок для цикла и букмарка
и есть та отдельная дополнительная "обертка"
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c