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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 10:05   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию скользящая нумерация

Есть таблица заданий JOB (id_type (уникальный ключ), text, result, status) и таблица подзаданий SUBJOB (id_type (наследуется из JOB), id_podtype text, result). Каким образом можно сделать скользящую нумерацию в таблице SUBJOB для каждого ключа id_type?



Я предполагаю, что нужно рассматривать хранимые процедуры, но работала с ними 2 года назад. хотя бы по пунктам, что нужно сделать в процедуре.а особенно не понятно, каким образом автоинкрементное поле будет записыватся в бд через хп.
на кнопке добавить запись будет хп типа:
Код:
begin
insert into SUBJOB (id_type)
select JOB.id_type
from JOB left join SUBJOB on id_type=JOB.id_type
end

кто-нибудь знает как организовать генератор в sql server?
Изображения
Тип файла: jpg Безымянный.jpg (30.0 Кб, 170 просмотров)

Последний раз редактировалось kate158; 30.01.2012 в 11:14.
kate158 вне форума Ответить с цитированием
Старый 30.01.2012, 11:15   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
особенно не понятно, каким образом автоинкрементное поле будет записыватся в бд через хп
Если речь о поле id_podtype, то ни каким. Не бывает таких автоинкрементных полей. Кстати, если поле id_type в таблице JOB тоже автоинкрементное, то рано или поздно в нумерации дырки появятся. Или вы не предполагаете удаление записей?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.01.2012, 11:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, начнём с того, что Вы совершаете ОГРОМНЕЙШУЮ ошибку! Вы пытаетесь использовать уникальные ключи для каких-то других целей (нумерация чего-то там)! Это в корне неверно. Так поступать нельзя.
а если Вы удалите JOB с ID_TYPE = 1 - Вы что, будете изменять ключевые поля у оставшихся работ?!!

во-вторых, Вам вот эта нумерация для чего нужна? Рискну предположить, что это порядок выполнения подзадач? Так заводите дополнительное поле, которое давайте ручками изменять пользователю (ну или скрывайте его от пользователя, заменив его на кнопочка "Перенести подзадание на одну строчку вверх" и "Перенести подзадание на одну строчку вниз" и кодом на этих кнопках изменяйте нумерацию (банальный обмен). При добавлении нового подзадания запросом получайте максимальное значение порядкового номера и плюсуйте к нему единичку.


p.s. согласен с мнением Аватар

p.p.s. всё сказаное мною выше - исключительно моё личное мнение (ИМХО).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.01.2012, 11:29   #4
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

SUBJOB.id_podtype должно быть генерируемым полем начиная с 1. действительно, удаление предполагается, и дырки тоже возможны.
либо я непонятно объяснила, либо чего-то сама не догоняю.=)

ручки отменяются!!!
погодите. объясню нормально:
на форме есть грид с заданиями и грид с подзаданиями.на одно задание может быть много подзаданий. раньше поле SUBJOB.id_podtype у меня было первичный ключом и автоинкрементным. перемещаясь по нему, в мемо пользователь видел подзадания. так вот нумерация типа 101,102 и тд (на подзадания) показалась шлаком и пришла мысль сделать отдельную нумерацию на подзадания.кароче эта нумерация нужна для красоты и удобства пользователя.кто нибудь понял что я хочу?

Последний раз редактировалось kate158; 30.01.2012 в 11:39.
kate158 вне форума Ответить с цитированием
Старый 30.01.2012, 13:30   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. В каждой таблице должен быть уникальный автоинкоиментьный идентификатор
2. + Поле нумерации
3. Процедура на вставку в JOB - в процедуре найти SELECT-ом максимум поля нумерации и использовать это значение+1 при создании новой записи
4. Процедура на удаление из JOB - удалить запись и обновить значение поля нумерации в других записях, избавляясь таким образом от дырок
5. Процедура перемена местами двух соседних записей - соответствующее изменение поля нумерации в двух записях
5. Для другой таблицы почти аналогично с учетом того, что нумерация не сквозная, а в пределах группы записей
6. Реализуется или программно или с помощью хранимых процедур

Собственно это самое вам Serge_Bliznykov посоветовал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нумерация кругов Lifefine Общие вопросы Delphi 13 05.02.2011 22:36
Нумерация страниц Golovastik Microsoft Office Word 9 05.06.2010 20:09
нумерация строк strannik SQL, базы данных 1 19.05.2010 09:09
Нумерация строк Sparky БД в Delphi 6 16.02.2010 21:38
Нумерация BВВ Microsoft Office Word 1 23.10.2008 05:07