Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2010, 10:17   #1
chinara
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 12
По умолчанию Перемещение строк в таблице (Access)

Привет!!!
Люди,очень прошу,помогите...Я уже 2 дня пытаюсь сделать одну вещь,но никак она у меня не получается...((
Хочу на форме с таблицей (БД Access) сделать две кнопки - move up и move down - для перемещения строк в таблице.
Огромное всем спасибо!Жду..
chinara вне форума Ответить с цитированием
Старый 25.11.2010, 10:37   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Взаимно меняйте у них значение ключевого поля.
А вообще - затея бредовая.
Как вы собираетесь менять их местами после сортировки по какому-нибудь другому полю ?

Последний раз редактировалось mihali4; 25.11.2010 в 15:07.
mihali4 вне форума Ответить с цитированием
Старый 25.11.2010, 10:47   #3
chinara
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 12
По умолчанию

Спасибо за идею
А я вообще не буду делать сортировку.
chinara вне форума Ответить с цитированием
Старый 25.11.2010, 11:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Взаимно меняйте у них значение ключевого поля.
ну это нарушение всех мыслимых и немыслимых норм. Категорически не рекомендую!

А вот рекомендую добавить числовое поле, назвать его, например OrderTag
и туда писать число, какая эта запись должна быть по порядку.
Вот тогда строчку переместить вверх - это поменять значение полей OrderTag у текущей записи и у предыдущей записи (кстати, ID этой записи можно получать даже SQL запросом).

ну и не забывать при выборке данных указывать сортировку по этому полю:
select.... order by OrderTag

От Михалыча:
Именно первое поле - идентификатор записи, я и имел в виду, потому как не представляю себе таблицу без поля ID

Последний раз редактировалось mihali4; 25.11.2010 в 15:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2010, 12:04   #5
chinara
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 12
По умолчанию

А можно обойтись без SQL-кодов...??
Реализовать это на чистом паскале(delphi)??
chinara вне форума Ответить с цитированием
Старый 25.11.2010, 13:14   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да воля Ваша:
методы датасета .First .Next .Prev
свойства .isEmpty .Eof .Bof
возможно, метод поиска .locate()
помогут Ваш решить задачу без использования SQL запросов.

p.s. а Вот указывать сортировку по этому полю обязательно прийдётся!
иначе всё остальное бессмыслено!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2010, 13:46   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Я делал что-то подобное, не меняя ключевых полей... вот, нашел...
Код:
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;

//вверх
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
  MoveRow(ADOTable1, True);
end;

//Вниз
procedure TForm1.RzBitBtn2Click(Sender: TObject);
begin
  MoveRow(ADOTable1, False);
end;
Но, имхо, лучше sql-запросом поменять местами сортировочное поле, как Serge_Bliznykov написал.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Группировка строк в таблице Lara181278 SQL, базы данных 1 11.10.2010 12:31
Удаление строк в таблице maksim_serg Microsoft Office Word 5 30.04.2010 13:18
интересное перемещение в таблице Окоча Юра Microsoft Office Word 1 14.01.2010 15:47
Вычисляемое поле в таблице ACCESS, создать вычисляемое поля в таблице аксес artlayers Microsoft Office Access 2 04.11.2009 19:29
Перемещение по ячейкам строк в DBGrid .Phoenix БД в Delphi 10 25.09.2009 14:32