![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Стобец - порядковый номер [D5, D6, Paradox]
Weare © (2003-10-24 16:09:00)
Добрый день.
Ситуация такая: пользователь захотел видеть в своей таблице еще один столбец - порядковый. Причем, чтобы при изменении номера записи (непосредственно в самом столбце)она становилась в нужную позицию а все остальные номера пересчитались. Т.е. если запись была 8 по счету и этот номер поменяли на 4, то она становится четвертой и переписались бы все остальные номера.
Вопрос вот в чем: как можно это сделать с помощью быть может самих св-в таблицы или уже известными методами. А может решение какое-то уже и так существует. Очень не хочется кодировать все эти события: OnEdit, AfterPost, BeforeEdit, OnNewRecord, OnDelete, OnInsert.
Митяй (2003-10-24 18:23:00) [21]
Weare © (24.10.03 16:09)
А ты можешь растолковать , какую цель преследует пользователь данным кандибобером, проще говоря на хрюня ему это надо, честно сказать не пойму?
kaif (2003-10-24 18:22:00) [22]
Я не понимаю. У меня когда-то все это работало. Делаешь поле, делаешь индекс на него, берешь какой-нибудь TTable, устанавливаешь там свойства TableName, IndexField, и все работает. В событие AfterPost засунь команду DataSet.Refresh. Все должно работать.
Sandman25 (2003-10-24 17:48:00) [23]
>Может знаешь такие?
Для Paradox их нет.
Транзакцию у TDatabase надо использовать.
Vlad (2003-10-24 17:44:00) [24]
Weare © (24.10.03 17:40) [12]
Какие хранимые процедуры ? У тебя Paradox вроде ?
Weare (2003-10-24 17:40:00) [25]
> Sandman25 © (24.10.03 17:26) [11]
> Такое возможно, если для редактирования использовать хранимые
> процедуры.
Может знаешь такие?
Sandman25 (2003-10-24 17:26:00) [26]
>Но ведь должны же быть типовые примеры, связанные с порядковым номером и при добавлении или удалении записи номер бы рефрешировался.
Такое возможно, если для редактирования использовать хранимые процедуры.
Weare (2003-10-24 17:20:00) [27]
> Sandman25 © (24.10.03 17:11) [9]
> Точнее,
>
> where nom between :nom1 and :nom2
>
> nom1 = 8
> nom2 = 25
>
> Перед этим придется из 25 сделать -25, потом проапдейтить
> на 8.
Спасибо, я в принципе так и сделал, но у меня уже, нужные для решения этой проблемы, события были задействованы для других целей и теперь приходится отслеживать каждый шаг пользователя, чтобы эти события корректно отработали.
Так значит никаких готовых решений этому еще нет. :(
Но ведь должны же быть типовые примеры, связанные с порядковым номером и при добавлении или удалении записи номер бы рефрешировался.
Sandman25 (2003-10-24 17:11:00) [28]
Точнее,
where nom between :nom1 and :nom2
nom1 = 8
nom2 = 25
Перед этим придется из 25 сделать -25, потом проапдейтить на 8.
Reindeer Moss Eater (2003-10-24 17:09:00) [29]
Все это так, но пользователю неудобно будет записывать туда значния.
Я у тебя прочитал, что это желание самого пользователя
Sandman25 (2003-10-24 17:08:00) [30]
[5] Vlad © (24.10.03 17:06)
Можно еще update table set nom = nom + 1 where nom > :nom + Close/Open;
Weare (2003-10-24 17:07:00) [31]
> Reindeer Moss Eater © (24.10.03 16:59) [3]
> Остальное сделает за тебя юзер, вводящий значения в это
> поле нужных записей.
Все это так, но пользователю неудобно будет записывать туда значния. Т.к. если у него, например, 50 записей. Он открывает таблицу, они сортируются в порядке возрастания номера. И допустим 23-ю запись еме нужно сделать 8-ой. Он меняет ее номер, но ведь восьмая уже есть и тогда ее нужно поменять на 9-ю и т.д. - неудобно.
А, кстати, есть ли в гриде или таблице уже какие-то встроенные решения нумерации записей.
Vlad (2003-10-24 17:06:00) [32]
Если я правильно понял проблему, то ситуация следующая.
Пользователь меняет номер записи к примеру с 25-й на 8-ю.
При этом запись, которая раньше имела номер 8 должна стать 9-ой, 9-я становится 10-й, и так далее, до конца набора данных.
Если так, то простым способом тут не получится, все равно в цикле НД перебирать надо.
Sandman25 (2003-10-24 16:59:00) [33]
[2] Weare © (24.10.03 16:56)
Номер записи должен быть таким же полем БД, как и все остальные.
Reindeer Moss Eater (2003-10-24 16:59:00) [34]
Очень не хочется кодировать все эти события
Добавь нумерик поле в эту таблицу.
Покажи его в гриде.
Сортируй датасет всегда по этому полю.
Остальное сделает за тебя юзер, вводящий значения в это поле нужных записей.
Weare (2003-10-24 16:56:00) [35]
> Reindeer Moss Eater © (24.10.03 16:15) [1]
> alter table mytable add orderfield number;
Ты конечно извини, но я ничего не понял из твоего ответа. Если можешь, объясни поподробнее, "на пальцах".
Reindeer Moss Eater (2003-10-24 16:15:00) [36]
alter table mytable add orderfield number;
И сортировать всегда по этому полю