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

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

Передвижение записей "вверх" и "вниз". Способ реализации... [D7, XP]


Страницы:   1 2

Juju ©   (2006-11-13 15:18:00) 

Задача:
Нужно передвигать запись в таблице "вверх", "вниз". Собственно ничего сложного... суть вопроса в способе реализации. Мне показалось что мой не совсем рационален.

Если есть время - гляньте пожалуйста...

Знаю, что нет ничего ужаснее разбираться в чужом коде, облегчил задачу вставив коментарии.

Побовал решить:
Используемые компоненты:
qQUERY:TQuery

Структура TABLE:
NUM - Код автоинкримент
NAME- Название
POS - Позиция (по которой собственно и определяется положение записи)

Используемые переменные:
PR- POS предыдущей записи
CR- POS текущей записи
PN- NUM предыдущей записи
CN- NUM текущей записи
BM- Закладка для определения где должен вставать курсор после реализации

Привожу на примере экшена кнопки (хотя у меня оформлено в отдельной процедуре)

procedure TForm1.bbUpClick(Sender: TObject);
var PR,CR,PN,CN:Integer;
BM:TBookmark;
begin
//Проверяю или запись не первая
if qQUERY.RecNo = 1 then Exit;
//Определяю значения переменных
//Текущая запись
CN := qQUERY['NUM'];
CR := qQUERY['POS'];
qQUERY.Prior;
//Запоминаем положение курсора
BM := qQUERY.GetBookmark;
//Предыдущая запись
PN := qQUERY['NUM'];
PR := qQUERY['POS'];
//Обновляю новое значение для текущей и предыдущей записи
qQUERY.Close;
qQUERY.SQL.Text :='UPDATE TABLE SET POS = '+IntToStr(CR)+' WHERE NUM = '+IntToStr(PN);
qQUERY.ExecSQL;

qQUERY.Close;
qQUERY.SQL.Text :='UPDATE TABLE SET POS = '+IntToStr(PR)+' WHERE NUM = '+IntToStr(CN);
qQUERY.ExecSQL;

//Показываю данные отсортированные для отображения
qQUERY.Close;
qQUERY.SQL.Text := 'SELECT * FROM TABLE ORDER BY POS';
qQUERY.Open;
//Ставлю курсор на нужную запись
qQUERY.GotoBookmark(BM);
qQUERY.FreeBookmark(BM);
end;

Перемещение вниз осуществлено по образу и подобию - поэтому код не привожу.


Anatoly Podgoretsky   (2006-11-14 11:45:00) [1]

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


Juju   (2006-11-14 11:41:00) [2]

ANB
Спасибо за вариант.
(P.S. TABLE - я указал только для удобочитаемости своего кода... Все проблемы с TABLE, GROUP, POSITION - уже пройдены и учтены:) )

>Вот только сомнения меня берут по поводу посильности взятой задачи - склад - не шутка

Телефонные справочники перестали заказывать :)
StriderMan
Спасибо за понимание и поддержку огнем. :)

>я так понял поля неуникальные?

Все поля уникальны.
Anatoly Podgoretsky

>а здесь между форум и каждые имет право писать, а не только то что хочет автор

Со стороны себя послушай. Для того чтобы писать ВСЁ что в голову взбредет и перемешивая это ВСЁ с грубостью и мальчишичьими плевками - есть отдельный форум, а здесь либо пишешь ответ - либо игнорируешь - а засирать форум можно и без знания Delphi.
С другой стороны форум называется "Начинающим". Поэтому все хамство засовывается за воротник и опять таки - либо спокойно объясняешь - либо игнорируешь. А болтать на тему, которая не интересует автора - в курилку.

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

Нет времени и желания не отвечай. А то как-то не совпадает...: на грубости и всякую муть с синдромом пенсионного учителя время есть - а ответить на проблему времени нет.
Из 29 постов 4-ре по теме - остальные с ярлыком "у нас нет времени говорить о деле - мы поговорим о том, как недосягаемо умны, а ты туп как пробка. И вообще нам денег никто не платит - поэтому обсирать или не обсирать - это наше дело".


ASoft   (2006-11-14 04:23:00) [3]

>Juju
как вариант, возможно, извращенский...
портировать таблицу в StringGrid, перемещать строки в ней как хочется, по закрытию апдейтить базу..


Anatoly Podgoretsky   (2006-11-13 20:00:00) [4]

> StriderMan  (13.11.2006 19:58:27)  [27]

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


StriderMan   (2006-11-13 19:58:00) [5]


> Anatoly Podgoretsky ©

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


Anatoly Podgoretsky   (2006-11-13 19:54:00) [6]

> StriderMan  (13.11.2006 19:35:23)  [23]

Да совесть должна быть.
Хочешь обязательности, обращайся в службу поддержки.


Anatoly Podgoretsky   (2006-11-13 19:53:00) [7]

> StriderMan  (13.11.2006 19:23:21)  [21]

У тебя требования как службе поддержки, а здесь между форум и каждые имет право писать, а не только то что хочет автор.


Ketmar   (2006-11-13 19:42:00) [8]

>[23] StriderMan(c) 13-Nov-2006, 19:35
>знать куда тебя ткнут :)
не нужно. понятно, что в справку или документацию. %-)


StriderMan   (2006-11-13 19:35:00) [9]


> Ketmar ©   (13.11.06 19:30) [22]
> телепаты перманентно в отпуске. а недоволен ответами -- не спрашивай.

видать чтоб спрашивать надо быть тоже телепатом, заранее знать куда тебя ткнут :)


Ketmar   (2006-11-13 19:30:00) [10]

>[21] StriderMan(c) 13-Nov-2006, 19:23
>Не знаете "зачем" - незачем давать советы.
телепаты перманентно в отпуске. а недоволен ответами -- не спрашивай.


StriderMan   (2006-11-13 19:23:00) [11]

Эх! месяцев несколько назад осаждал форум с точно такой же траблой! И наткнулся на такую же стену непонимания и презрения. А ведь уважаемых мастеров никто не спрашивал "зачем это"? Не знаете "зачем" - незачем давать советы. Сорри если кого обидел.

> Juju  
я так понял поля неуникальные?


ANB   (2006-11-13 19:09:00) [12]


> Реакция нормальная на тех, кто пытается очевидную и правильно
> заложенную функциональность вывернуть под "цвет своих трусов".
>
> Тебе не понятно, что такое ISAM ?

Чего ты привязался к человеку. В данном случае быстрее написать, как хочет начальник, чем убедить того, что это неправильно. Набъет начальник кривые данные - это его проблемы. Потом за отдельную плату чинить будет.

Вот только сомнения меня берут по поводу посильности взятой задачи - склад - не шутка.


Jeer   (2006-11-13 19:06:00) [13]

Тут недавно еще один изобретатель велосипеда пытался любую нужную ему запись вытолкнуть в top DBгрида.

Да все можно, есс-но.
Но лучше не бросаться исполнять "волю" ЗАказчика, а работать с ним и убеждать в целесообразности наработанных IT-сообществом интерфейсов.


ANB   (2006-11-13 19:06:00) [14]

create table Catalog
(
NUM  integer, -- Êîä àâòîèíêðèìåíò
NAME varchar2(255), -- Íàçâàíèå
POS  integer  -- Ïîçèöèÿ (ïî êîòîðîé ñîáñòâåííî è îïðåäåëÿåòñÿ ïîëîæåíèå çàïèñè)
)

select * from Catalog order by Pos

update Catalog
  set Pos =
         case
            when Pos = :Oldpos
               then :Newpos
            when :Newpos > :Oldpos
               then Pos - 1
            when :Newpos < :Oldpos
               then Pos + 1
            else Pos
         end
where Pos between :Minpos and :Maxpos

Подробности :
1. Не называй таблицы TABLE - грабли обеспечены
2. В параметры пихаешь старую и новую позиции. В minpos и maxpos пихаешь их же, но в мин - меньшую из них, в макс - большую.


Anatoly Podgoretsky   (2006-11-13 19:06:00) [15]

> Juju  (13.11.2006 18:57:14)  [14]

> А если оценивать ее в моральном эквиваленте - лишишься работы.

А противном случае можешь лишиться другого.


Jeer   (2006-11-13 19:03:00) [16]


> Какая-то нездоровая реакция в понедельник-то!


Реакция нормальная на тех, кто пытается очевидную и правильно заложенную функциональность вывернуть под "цвет своих трусов".
Тебе не понятно, что такое ISAM ?
Почитай.
Или переходи, как было сказано на не DBAware контролы.


Juju   (2006-11-13 19:01:00) [17]

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

А в целом тема форума совсем не о том. И заметте: Просьбы типа: "Напишите за меня процедурку" - здесь не звучит... чего реакция такая?


Juju   (2006-11-13 18:57:00) [18]

Anatoly Podgoretsky

>[9]
>А если он пожелает денежки переводить на свой счет, что и тогда будешь удовлетворять это желание?

Смотря как к этому относиться.
Незнаю насколько тебе легко находить клиентов. И насколько адекватно они оплачивают твой труд. Я держусь за каждого.
Есть задача для программиста. Она оценена в денежном эквиваленте. На этом и стоит останавливаться. А если оценивать ее в моральном эквиваленте - лишишься работы.

>[10]
>Так делай, чего нас то спрашиваешь.

Я сделал.Мой вариант работает - но у меня сомнение в рациональности и правилдьности подхода к выполнению задачи! Я не собираюсь выезжать чужими силами. Прежде чем задать вопрос я пробую решить все собственными силами. А если гуру отвечать не желает - он не отвечает - вот и все. Какая-то нездоровая реакция в понедельник-то!
ANB
Все Ок. Больше не загружаю.
mfender
Я недавно делал программу и организовывал передвижение в ListBox-e. Здесь база данных Access и в качестве DataSet использую TQuery.


Jeer   (2006-11-13 18:52:00) [19]


> Juju   (13.11.06 17:20) [7]


лично я таких начальников и суетящихся рядом с ними "программеров" посылаю в "лесостепь" и "мореокиян" - самое место, пусть побродят.


ANB   (2006-11-13 18:41:00) [20]


> Juju   (13.11.06 17:31) [8]

Ща, не уходи - сочиню . . .


Страницы:   1 2

Наверх

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