![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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