Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.043 c
2-1174653515
valua
2007-03-23 15:38
2007.04.15
DivMod


1-1171616348
_Mouse_
2007-02-16 11:59
2007.04.15
Подключение библиотеки к Pascal Scripts


15-1174168299
ElectroMagnetizm
2007-03-18 00:51
2007.04.15
Ищу книгу


6-1161818820
arpohom
2006-10-26 03:27
2007.04.15
TServerSocket и Сетевые Интерфейсы


2-1174405904
quott
2007-03-20 18:51
2007.04.15
TDateTime





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский