Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: автоинкементное поле Paradox  (Прочитано 5398 раз)
0 Пользователей и 1 Гость смотрят эту тему.
liones
Постоялец

ru
Offline Offline
Пол: Женский

« : 20-04-2009 06:41 » 

Проблема такая, есть таблица Paradox с автоинкементным полем ID. После очистки таблицы (EmptyTable), поле ID генерируется не с 1. Наверно как-то надо сжать таблицу, но не знаю как. Подскажите, пожалуйста.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 20-04-2009 07:28 » 

я делал так (но не в Paradox )
Код:
declare varible delta BIGINT;

delta=0;

select min(ID) from table into :delta;

update table set ID=ID-delta+1;

select max(ID) from table into :delta;

set generator ИМЯ_ГЕНЕРАТОРА to delta;
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 21-04-2009 04:32 » 

вероятно никак (гугл Вам в помощь)
как вариант -
1) удалить таблицу (вы ведь её очищаете) и создавть заново
2) изменить тип поля на простой integer, а потом опять сделать его автоинкрементным (но может и не сработать)
Записан

I Have Nine Lives You Have One Only
THINK!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 21-04-2009 04:58 » new

о, кстати, забыл самое главное. У меня это "сжатие" делалось тогда, когда разница между максимальным и минимальным была больше, чем минимальное - чтобы избежать конфликта при перенумеровке.

Тут тогда надо сначала пронумеровать все ID значением ID+MAX(ID) , затем только  с единички
Код:
declare varible delta BIGINT;

/*создаём коридор для гарантии несовпадения ID при перенумеровке*/
select max(ID)-min(ID)+1 from table into :delta;
update table set ID=ID+delta;

/*перенумеровываем с единички*/
select min(ID)+1 from table into :delta;
update table set ID=ID-delta;

/*корректировка генератора*/
select max(ID) from table into :delta;
set generator ИМЯ_ГЕНЕРАТОРА to delta;

А ещё один вариант - создать копию таблицы, очистить исходную, установить генератор в 1, затем закинуть туда записи. Но это долго, если таблица большая )
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines