Страница 1 из 1

Нагибаю маркеры

Добавлено: 14 июн 2008, 15:25
galover
Решил тут велосипедом проехаться по маркерам. Отказался от стандартного механизма маркеров, тем более он не совсем хорошо подходит к моей задаче -> просто завел дополнительное булево поле (признак выделения) в моей таблице, все вроде пучком, полет нормальный. Но вот с выделением/снятием выделения сразу всех записей лажа :(

Вот такой код

Код: Выделить всё

 cmSelectAll:
  {
     update tblMy set tblMy.Checked := true;
     RescanPanel(#tblMy);
  }
  cmUnselectAll:
  {
     update tblMy set tblMy.Checked := false;
     RescanPanel(#tblMy);
  }
приводит к тому, что в browse пропадают все записи, а вот при таком коде

Код: Выделить всё

 cmSelectAll:
  {
     _loop tblMy
        update current tblMy set tblMy.Checked := true;

     RescanPanel(#tblMy);
  }
  cmUnselectAll:
  {
     _loop tblMy
        update current tblMy set tblMy.Checked := false;

     RescanPanel(#tblMy);
  }
все работает как надо, но это слишком медленно - записей очень много. Что можно подкрутить? Заранее спасибо!

P.S. На всякий случай код самого browse

Код: Выделить всё

browse gridMy (,, sci178EnEscIns)
  show at(,,, 30);
  table tblMy;
  recMarker : If(Checked, 'img1', '');
  fields
    {font={Color = If(Checked, ColorMark, 1)}};
    tblMy.NRec     'NRec'                : [15], protect;
    tblMy.Date      'Дата'                : [8 ], protect;
end;

Добавлено: 16 июн 2008, 15:43
k_vit
приводит к тому, что в browse пропадают все записи


может у вас на tblMy наложены ограничения? поэтому записи при updat'e пропадают.

а так, проверял : update tblMy set tblMy.Checked := true; работает

Добавлено: 16 июн 2008, 16:16
galover
никаких bounds и condition не установлено! У browse просто сносит крышу при пакетном изменении большого количества записей

Добавлено: 16 июн 2008, 17:17
dp
попробуйте update делать на синониме - должно помочь.

Добавлено: 16 июн 2008, 19:02
galover
dp
РЕСПЕКТИЩЕ, РАБОТАЕТ, плевать что костыль!!! Вы случайно не из самой Галактики?

Добавлено: 17 июн 2008, 16:09
dp
galover
нет. не из самой Галактики. но не далеко :)

Добавлено: 18 июн 2008, 09:14
Алексей
dp ну, не скромничайте... все мы из Галактики.... Галактики "Млечный путь" :grin:

а по теме, по-моему можно было делать ещё типа _Loop External, тогда апдейт тоже проходил нормально.

Добавлено: 18 июн 2008, 10:43
galover
Алексей
Я выше запостил код, там _loop работает как надо (и без external), вопрос был про пакетный update!

Добавлено: 18 июн 2008, 14:28
dp
Алексей
external - для прохода по таблице будет использована внешняя выгрузка
поэтому если таблица достаточно большая это может оттормажить изрядно.
практичнее update на синониме

Добавлено: 19 июн 2008, 06:13
Алексей
dp согласен, я стараюсь не делать апдейты по полям, которые задействованы в ЛТ, если уж никак, то синоним.