C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как выставить записи по порядку?  (Прочитано 3479 раз)
andrey24
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 52


Как выставить записи по порядку?
« : 16 Сентябрь 2010, 16:18:06 »

Создаю базу данных paradox, каждой записи автоматически присваивается Номер. К примеру, у меня 2000 записей и если я из них удалю, например 500(то есть их останется 1500) нумерация все равно продолжится с 2000 записи(ХОТЯ ИХ 1500). Как сделать, чтобы так не происходило т.е новым записям присваивались номера удаленных?заранее спасибо)
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Как выставить записи по порядку?
« Ответ #1 : 16 Сентябрь 2010, 16:21:50 »

Зачем?
Записан
andrey24
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 52


Re: Как выставить записи по порядку?
« Ответ #2 : 16 Сентябрь 2010, 16:30:32 »

Нужно подскажите пожалуйста варианты решения проблемы.
Записан
Lilo
Участник


Сказали спасибо: +17/-6
Offline

Сообщений: 253


Re: Как выставить записи по порядку?
« Ответ #3 : 16 Сентябрь 2010, 16:53:26 »

Цитата: andrey24 от 16 Сентябрь 2010, 16:18:06
Создаю базу данных paradox, каждой записи автоматически присваивается Номер. К примеру, у меня 2000 записей и если я из них удалю, например 500(то есть их останется 1500) нумерация все равно продолжится с 2000 записи(ХОТЯ ИХ 1500). Как сделать, чтобы так не происходило т.е новым записям присваивались номера удаленных?заранее спасибо)
я тоже ни понимаю зачем, но привяжи нумирацию к количеству записай для достижения желаемого результата (я бы так и не стал над этим парится, смысла нету совсем!!!)
Записан
andrey24
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 52


Re: Как выставить записи по порядку?
« Ответ #4 : 16 Сентябрь 2010, 20:02:43 »

Ну вот мне надо париться)
Записан
Hammersoft
Участник


Сказали спасибо: +23/-2
Offline

Сообщений: 167


Re: Как выставить записи по порядку?
« Ответ #5 : 17 Сентябрь 2010, 00:00:30 »

Наверное, поле вычисляемое надо делать. А то как-то нереально - при удалении одной записи переписывать значение поля во всех остальных записях. Вроде как есть RecNo.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Как выставить записи по порядку?
« Ответ #6 : 17 Сентябрь 2010, 03:37:03 »

RecNo - это номер записи в датасете. Не более того. Никакой физической привязки к значениям ID записей в БД нет. В принципе, можно написать отдельную обработку, которая будет вытаскивать все записи из таблицы и делать им update поля ID. Из минусов - запросы типа SELECT * при дальнейшем росте объема БД грузят компьютер.
« Последнее редактирование: 17 Сентябрь 2010, 10:18:34 от Tantos » Записан
regerr
Гость
Re: Как выставить записи по порядку?
« Ответ #7 : 17 Сентябрь 2010, 06:24:56 »

Цитата: andrey24 от 16 Сентябрь 2010, 16:30:32
Нужно :D подскажите пожалуйста варианты решения проблемы.

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


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Как выставить записи по порядку?
« Ответ #8 : 17 Сентябрь 2010, 06:49:44 »

Обновление значения ключевого поля обычно ни разу не рулит. Как только начнете работать с master-detail отношениями и ссылочной целостностью, так сразу узнаете, почему.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Как выставить записи по порядку?
« Ответ #9 : 17 Сентябрь 2010, 07:26:55 »

Я не знаю, поможет ли это, но я как-то тоже делал подобную вещь для БД Firebird. Для этого я написал простенькую процедуру для триггера BeforeInsert:
Код
CREATE OR ALTER TRIGGER suppdata_bi0 FOR suppdata
active BEFORE INSERT POSITION 0
AS
   DECLARE variable i INTEGER;
BEGIN
   /* Сгенерировать перв. ключ */
 IF (NEW.ID IS NULL) THEN /* если не указан первичный ключ */
 BEGIN
   i = 1;
   while (i GEN_ID("GEN_SuppData_ID", 0)) do
   BEGIN
       IF (EXISTS(SELECT ID FROM SUPPDATA WHERE ID = :i)) THEN /* приращение числа, если такое уже есть */
           i = i + 1;
       ELSE
       BEGIN
           NEW.ID = i; /* назначение уникального ключа */
           exit;
       END
   END
   NEW.ID = GEN_ID("GEN_SuppData_ID", 1); /* если значение автом. генератора меньше i */
 END
END
 
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Как выставить записи по порядку?
« Ответ #10 : 17 Сентябрь 2010, 08:13:31 »

*перекрестился*
Записан
Lilo
Участник


Сказали спасибо: +17/-6
Offline

Сообщений: 253


Re: Как выставить записи по порядку?
« Ответ #11 : 17 Сентябрь 2010, 08:41:12 »

Цитата: andrey24 от 16 Сентябрь 2010, 16:18:06
Создаю базу данных paradox, каждой записи автоматически присваивается Номер. К примеру, у меня 2000 записей и если я из них удалю, например 500(то есть их останется 1500) нумерация все равно продолжится с 2000 записи(ХОТЯ ИХ 1500). Как сделать, чтобы так не происходило т.е новым записям присваивались номера удаленных?заранее спасибо)
Цитата: S0mbre от 17 Сентябрь 2010, 07:26:55
Я не знаю, поможет ли это, но я как-то тоже делал подобную вещь для БД Firebird. Для этого я написал простенькую процедуру для триггера BeforeInsert:
Код
CREATE OR ALTER TRIGGER suppdata_bi0 FOR suppdata
active BEFORE INSERT POSITION 0
AS
   DECLARE variable i INTEGER;
BEGIN
   /* Сгенерировать перв. ключ */
 IF (NEW.ID IS NULL) THEN /* если не указан первичный ключ */
 BEGIN
   i = 1;
   while (i GEN_ID("GEN_SuppData_ID", 0)) do
   BEGIN
       IF (EXISTS(SELECT ID FROM SUPPDATA WHERE ID = :i)) THEN /* приращение числа, если такое уже есть */
           i = i + 1;
       ELSE
       BEGIN
           NEW.ID = i; /* назначение уникального ключа */
           exit;
       END
   END
   NEW.ID = GEN_ID("GEN_SuppData_ID", 1); /* если значение автом. генератора меньше i */
 END
END
 
Записан
andrey24
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 52


Re: Как выставить записи по порядку?
« Ответ #12 : 17 Сентябрь 2010, 15:05:24 »

Всем спасибо за советы)
Я решил действовать иначе. Я оставлю поле Номер без изменений. Лучше сделать еще один столбец, где номера записей будут привязаны к алфавиту! Как это сделать?
Заранее спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.255 секунд. Запросов: 22.