Перемещение записи в TDataSet вверх-вниз
Дата: 30.10.2011 | Комментариев: 0 | Просмотров: 35842
На форумах часто задают вопрос как переместить запись в таблицу вверх или вниз в DBGrid-е. Если DataSet сортируется по какому-нибудь ключевому полю, то нужно поменять местами значения этого поля между двумя записями. А если DataSet сортируется по автоинкрементному полю которое нельзя изменять?В таком случае придется заменить значения всех полей кроме автоинкрементного.
Итак, имеем DataSet, в свойтве которого IndexFieldNames указано автоинкрементное поле.
Можно использовать такую процедуру:
procedure MoveRow(Dataset: TDataSet; MoveUp: Boolean);
var
В В bmOld, bmNew: TBookmark;
В В v_new, v_old: array [0 .. 50] of Variant;
В В i: Integer;
begin
В В with Dataset do
В В begin
В В {Установим закладку на текущую запись}
В В В В bmOld := GetBookmark;
В В В В {Передадим в массив значения всех
В В В В В В полей кроме автоинкрементного}
В В В В for i := 0 to FieldCount - 1 do
В В В В В В if Fields[i].DataType <> ftAutoInc then
В В В В В В В В v_old[i] := Fields[i].AsVariant;
В В В В if MoveUp then
В В В В В В Prior
В В В В else
В В В В В В Next;
В В {Если перемещаем первую запись вверх или
В В последнюю вниз, то прекращаем процедуру}
В В В В if (Eof) or (Bof) then
В В В В В В Exit;
В В В В {Снова установим закладку на текущую запись}
В В В В bmNew := GetBookmark;
В В В В {Снава передадим в массив значения всех
В В В В В В полей кроме автоинкрементного}
В В В В for i := 0 to FieldCount - 1 do
В В В В В В if Fields[i].DataType <> ftAutoInc then
В В В В В В В В v_new[i] := Fields[i].AsVariant;
В В В В Edit;
В В В В В В {Запишем значения}
В В В В for i := 0 to FieldCount - 1 do
В В В В В В if Fields[i].DataType <> ftAutoInc then
В В В В В В В В Fields[i].AsVariant := v_old[i];
В В В В Post;
В В В В GotoBookmark(bmOld);
В В В В Edit;
В В В В {Запишем значения}
В В В В for i := 0 to FieldCount - 1 do
В В В В В В if Fields[i].DataType <> ftAutoInc then
В В В В В В В В Fields[i].AsVariant := v_new[i];
В В В В Post;
В В В В GotoBookmark(bmNew);
В В end;
end;
Пример использования:
{Вверх}
MoveRow(Table, True);
{Вниз}
MoveRow(Table, False);
Удачи.
Delphi_Coder
Октябрь, 2011
При перепечатке любых статей ссылка на сайт delphi-z.ru обязательна.
Все используемые на сайте статьи, файлы и логотипы компаний принадлежат их законным владельцам. Если вы являетесь правообладателем "Перемещение записи в TDataSet вверх-вниз" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.
Категория: Публикации » Публикации - Мои статьи
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.