|
Вопрос # 5 578/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите как в базе данных создать автоинкрементное поле, что-то я запутался совсем, либо создавать генератор и основанный на нем триггер в БД либо пользоваться свойством GeneratorField у компонента IBDataSet. Сейчас мой генератор увеличивает значение на 2, что неправильно. и еще, как лучше заполнить ключевое поле, со значениеми "P"+<номер>, можно ли использовать для этой цели генератор?
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 18 августа 2011, 06:02; участников в обсуждении: 2.
|
Мережников Андрей (статус: Абитуриент), 16 августа 2011, 17:35 [#1]:
Судя по используемому компоненту IBDataSet, используете БД семейства Interbase. В таком случае для автоинкрементного поля используется триггер и генератор в самой БД. Для чего необходимо использование тестового поля в качестве автоинкрементного?
|
|
Казаков Николай Константинович (статус: 1-ый класс), 17 августа 2011, 08:51 [#2]:
да, использую FireBird. с увеличением значения генератора на 2 разобрался, использование текстового поля в качестве автоинкрементного не принципиально, но просто интересно возможно это или нет, долго бился, но что-то ничего не вышло ). Что касается использования триггера и генератора, то сначала у меня было так: в БД создал генератор, создал триггер, кот. ссылался на этот генератор (триггер создал с проверкой на NULL). в своем приложение использовал еще и сво-во GeneratorField, что как я в дальнейшем и понял и стало причиной ошибки, после того как отключтл триггер, значение стало формироваться корректно. и последнее, как можно скинуть значение генератора и что из этого получится с учетом того, что он уже использовался для формирования значения полей БД?
|
|
Мережников Андрей (статус: Абитуриент), 18 августа 2011, 06:02 [#3]:
лучше использовать генератор и триггер в самой БД - это позволит корректно заполнять автоинкрементное поле даже из других приложений. Если в БД уже есть записи, то генератор лучше не сбрасывать - могут появиться дубликаты значений. В принципе можно использовать текстовое поле для хранения таких значений. Просто в триггере прописываете соответствующее присвоение значения с преобразованием числового значения генератора в строковое, но зачем? Во-первых, потребуется больше места для хранения, во-вторых - поиск по текстовым полям занимает больше времени, чем по числовым. Преобразовывать надо к виду 'P00000001','P00000002',... иначе сортировка даст результат: 'P1','P10','P11','P13','P2','P20'....
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|