Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

Как сделать групповую операцию над 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
15-1174567505
xman
2007-03-22 15:45
2007.04.15
StarTeam


15-1173969377
Влад
2007-03-15 17:36
2007.04.15
Библиотека аналог XDelta


2-1174590591
CatRin
2007-03-22 22:09
2007.04.15
Как сделать имитация вввода чего0либо с клавиатуры?


2-1174759711
Леонид
2007-03-24 21:08
2007.04.15
Однотипные процедуры


15-1174400726
infom
2007-03-20 17:25
2007.04.15
Олимпиадная задачка...