C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как сделать так чтобы...., MS SQL Server 2000
exp
  Отправлено: 15.05.2006, 13:37


Мастер участка

Группа: Участник
Сообщений: 304



Пусть есть таблица Dealer(ID int, Name char(50))
Как сделать так, чтобы добавление происходило по имени, а ID присваивался автоматически.

Пример
1)
ID Name
1 Вася
2 Петя
3 Вова
4 Гоша

2) Удаляем Вову (после чего в полях id будет "дырка", из-за удаления тройки)
3) Добавляеме Рому, но ему присваивается ID не 5 а 3

Проще говоря, надо организовать "закрытие дырок"
Может есть какие-то стандартные средства у Server 2000? а то не хочется изобретать велосипед
Большое спасибо за участие
Gedeon
Отправлено: 15.05.2006, 14:13


Ветеран

Группа: Модератор
Сообщений: 1742



Не очень давно обсуждали тут, поищите.
avc*
Отправлено: 15.05.2006, 14:40


Не зарегистрирован







QUOTE (exp @ 15/05/2006, 13:37)

...надо организовать "закрытие дырок"

А зачем?
Это вредная привычка. Вся прелесть автоинкрементного первичного ключа в том что он в обозримом периоде времени не повторяется.
Обычно это смущает только некоторых конечных пользователей. В этом случае есть два пути:
1. Объяснить, что это "не больно"
2. Сделать доплнительное поле "для красоты", заполняемое как хочется и видимое пользователю, а PK оставить как есть.
exp
Отправлено: 15.05.2006, 20:34


Мастер участка

Группа: Участник
Сообщений: 304



2avc:
Тото и оно, что с базами данных я постольку-поскольку. И не знаю как сделать это самое автоинкрементное поле.
// Хоть узнал, как это назназывается

2Gedeon
Поищу. smile.gif
AVC
Отправлено: 16.05.2006, 08:10


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

// Хоть узнал, как это назназывается

Вы не поняли. "Закрывание дырок" и автоинкрементное поле — это противоположности. Автоинкремент как раз и является первопричиной "дырок".
Как сделать автоинкремент это зависит от СУБД и gedeon подсказал где начать искать.
Shagg
Отправлено: 23.05.2006, 11:56


Не зарегистрирован







Если в MSSQL, то для поля ID можно установить свойство Identity, тогда оно будем автоинкрементным, уникальным и не будет позволять пустых значений.
А вставлять можно простым запросом:
Insert into Dealer(Name) Values('Чебурашка')
VilgelmKaizer
Отправлено: 05.10.2006, 17:33


Дежурный стрелочник

Группа: Участник
Сообщений: 38



Не надо парить неопытных программером свои остроумием.

Автоинкрементное поле создается так:
Например мы создаем таблицу(для MS SQL server)
create table TEMP(
t_ID int identity(1, 1) not null primary key,
t_Name varchar(255)
t_usr_ID int not null default(0))

в этом случае identity(1, 1) — говорит о том что это поле д.б. автоинкрементным, первая единичка- это начальное значение, а вторая это шаг. при вставе новой записи в это поле вставляется значение на 1 боьше чем в прошлый раз. Вот и все. Легко? Да проще пареной репы.
Нужно только знать синтаксис.

Вернуться в Работа с базами данных в C++Builder