Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADO, Ehlib. Коллеги, подскажите, пожалуйста! [D7, XP]


azamatufa ©   (2007-07-03 13:52:00) 

Уважаемые коллеги!

Имею DBEhlibGrid с мультиселектом.
Выделяю неск. записей и собираю их ID'ы (чтоб потом скопом удалить)


 s := '';
 for i:=0 to MainGrid.SelectedRows.Count-1 do begin
   MainQuery.Bookmark := MainGrid.SelectedRows[i];
   if i>0 then s := s + ',';
   s := s + MainQuery.FieldByName('ID').AsString;
 end;


в результате имеем s = '2,3,4,5,7,8,9'   типа того (набор ID'ов)
а далее
DELETE FROM Table1 WHERE ID IN (s);

Вопрос:
иногда после удаления, жму на грид и выскакиваеи ошибка - типа неверная закладка! Отловить не могу!

Как после вышеуказанного цикла очистить букмарк???
MainQuery.Bookmark := '';         //    так можно?

Спасибо!


azamatufa   (2007-07-12 15:22:00) [1]

ну вот опять: в IDE дельфей ошибка есть, запускаю вне - ошибки нет (


azamatufa   (2007-07-12 14:03:00) [2]

т.е. как после того как я говорил

MainQuery.Bookmark := MainGrid.SelectedRows[i];


сказать Датасету и Гриду, что нет никаких букмарков!!! ((  нет букмарков - нет "недопустимых закладок"  ((


azamatufa   (2007-07-12 13:28:00) [3]


> Вместо букмарок для сохранения и локализации использовать
> UID записей


ну хорошо, а как тогда мне в MainGrid'e узнать какие выбраны записи?

подскажите альтернативу нижеследующему:

s := '';
for i:=0 to MainGrid.SelectedRows.Count-1 do begin
  MainQuery.Bookmark := MainGrid.SelectedRows[i];
  if i>0 then s := s + ',';
  s := s + MainQuery.FieldByName('ID').AsString;
end;


видно, что в этом фрагменте используется букмарк..

(а вообще для сохранения указателя я делаю как вы говорите:
if not DataSet.IsEmpty then
 ID := DataSet.FieldByName('ID').AsInteger
else
 ID := 0;

...
после чего:
 DataSet.Locate('ID',ID,[]);


MsGuns   (2007-07-12 12:39:00) [4]

Вместо букмарок для сохранения и локализации использовать UID записей


azamatufa   (2007-07-12 10:40:00) [5]

Да, у меня после удаления записей идет перечитка датасета..
а как быть? ((

---
в этой функции глючит: (ehlibvcl)


function DataSetCompareBookmarks(DataSet: TDataSet; Bookmark1, Bookmark2: TBookmarkStr): Integer;
begin
 Result := DataSet.CompareBookmarks(TBookmark(Bookmark1), TBookmark(Bookmark2));
end;


MsGuns   (2007-07-12 10:06:00) [6]

Закладки перестают быть актуальными после любой перечитки датасета, в т.ч. из локального буфера


Johnmen   (2007-07-12 09:42:00) [7]

1. собираем ID
2. чистим список закладок
3. делаем что угодно, и DELETE и прочее...


azamatufa   (2007-07-12 08:51:00) [8]


> Johnmen


че-то не пропал этот глючок ((
появляется в EhLibVcl с надписью "Недопустимая закладка" (когда я делаю выделение и удаление выделенных записей свой процедуркой см. выше)..
ну никак не могу отловить.. ((


azamatufa   (2007-07-03 14:26:00) [9]


> Johnmen ©   (03.07.07 14:23) [1]
> MainGrid.SelectedRows.Clear


вот спасибо!


Johnmen   (2007-07-03 14:23:00) [10]

MainGrid.SelectedRows.Clear


Наверх

Титульная страница Поиск, карта сайта Написать письмо