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

 
Тип Autoincrement, как с ним работать?
Лена
Отправлено: 25.02.2006, 22:45


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

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



Подскажите, как сделать, чтобы в первой колонке цифры всегда шли строго по возрастающий на единицу 1,2,3,4, и т.д. Эта колонка имеет правильный тип Autoincrement, однако если удалять, а затем добавлять записи, то это колонка запоминает номера бывших записей и уже не удается добавить строки с ранее существовавшими номерами. Как сделать чтобы всегда цифры в этой колонки шли по порядку, без пропусков (см.рисунок). На рисунке стараюсь вставить запись, чтобы у нее был номер 4, однако вставляется в конец за последний номер. Получается номера строк с 4 до 8 (ранее удаленные) уже не вернуть?



Присоединить изображение

Присоединить изображение

Gedeon
Отправлено: 26.02.2006, 00:54


Ветеран

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



Прийдется только мудрить руками, но для этого надо знать БД, а вообще советую отказаться от этой идеи, обсуждалось уже где-то здесь.
Valdemar
Отправлено: 26.02.2006, 10:32


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

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



Когда мне надо чтобы одна колонка DBGrid содержала номера по-поряду без пропусков я использую метод OnDrawColumnCell и рисую номера сам. А автоинкрементное поле вообще не показываю.
Лена
Отправлено: 26.02.2006, 10:37


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

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



Cпасибо, понятно.
Вот еще пару вопросов. Для удаления записей пользуюсь стандартным навигатором баз данных с вкладки DataControls. При нажатии удаления строки (кнопка "минус" навигатора), сначала появляется окно с англоязычной надписью просящей подтверждения удаления. Как обработать это событие, чтобы вставить свой ShowMessage (уже на русском)?
2. Можно ли у навигатора, над каждой кнопкой сделать всплывающее подсказки о назначении его кнопок и можно ли как-то поменять цвет кнопок навигатора?
3. При вставлении значения в поле с типом currency автоматически добавляется денежная единица (например, 46,23р.). Как убрать "р" или как, например, заменить на "$". Надо как-то правильно написать маску…
4. Если пользователь вставляет в поле не тот тип, который там требуется, например в currency вставляет что-то типа 26.05.2006, то возникает исключение при нажатии на Enter. Как обработать правильно такое исключение, выдав свой ShowMessage?
Вопросов получилось много. smile.gif

olegenty
Отправлено: 27.02.2006, 07:31


Ветеран

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



поскольку пользуюсь TMemTableEh — проблем со сквозной нумерацией записей не имею вообще: создаю вычисляемое поле, например mtRecNo, и в OnCalcFields пишу
CODE

mtRecNo->AsInteger = mt->RecNo;

и всё, наступает счастье.

2. У навигатора есть св-во Hints
4. OnValidate поля

Отредактировано olegenty — 27/02/2006, 10:24
Kuks
Отправлено: 27.02.2006, 09:15


Станционный диспетчер

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



У меня реализовано такое, BCB6 — ADO — SQL2000...
Ссылку на статью нашел на sql.ru...
Реализовано со стороны сервера на UDF и двух триггерах,
работает без проблем... именно так как Вам надо  — без пропусков...
My Webpage
Лена
Отправлено: 27.02.2006, 12:09


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

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



Всем спасибо за ответы, буду разбираться. smile.gif

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