![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать значение autoincrement ;поля в IB5 [D5, IB5.x]
Nikola62 © (2003-01-29 00:51:00)В таблице имеется поле с автоувеличением (через триггер). Как после добавления новой записи в таблицу узнать значение этого поля?
passm (2003-01-29 10:52:00) [1]JibSkeart © (29.01.03 10:43)> Только в однопользовательском режиме.
JibSkeart (2003-01-29 10:43:00) [2]А можно еще из таблички брать максимальный ключ
а новый ключ инкременировать на 1
passm (2003-01-29 10:37:00) [3]Anatoly Podgoretsky © (29.01.03 10:04)> Не обязательно неверный дизайн.
Если сидит куча пользователей и набирают документы (приход, расход...) вариант с поиском по всем полям в данном случае не подходит, поскольку теоретически возможны совпадения.
Здесь позвольте отойти от IB и генераторов. Мне понравилось решение в DB2. Имеется функция GENERATE_UNIQUE(), которая всегда возвращает уникальное значение типа CHARACTER(13). Для генерирования результата берется CURRENT TIMESTAMP, номер сесси пользователя и немного случайной информации. Т.о. при создании нового документа беру:
SELECT NUM.NUM
FROM (VALUES(GENERATE_UNIQUE())) AS NUM(NUM)
И идентификатор для уникального значения и дальнейшего поиска по нему готов.
К чему это я: может, можно написать подобную UDF для IB и использовать подобный механизм в таблицах, где поиск по неключевым полям не гарантирован.
AlexSerp (2003-01-29 10:31:00) [4]Anatoly Podgoretsky © (29.01.03 10:04)
Согласен.
Саня
Johnmen (2003-01-29 10:19:00) [5]Еще одна разновидность решения - вставлять только с помощью ХП, которая будет возвращать необходимое значение...
Anatoly Podgoretsky (2003-01-29 10:04:00) [6]AlexSerp © (29.01.03 09:57)
Не по нескольким поля, а по всем.
Nikola62 (29.01.03 00:51)
Если тебе так нужен этот номер в тот момент, то читай Наталия © (29.01.03 05:44), у тебя в данном случае неверный дизайн.
AlexSerp (2003-01-29 09:57:00) [7]Сделать запрос поиска записи в таблице уникальному ключу, а там и взять значение нужного поля.
Если нет уникального поля, то можно сделать запрос по нескольким полям, которые будут однозначно указывать на эту запись.
Саня
Наталия (2003-01-29 05:44:00) [8]Можно узнать ДО добавления записи в таблицу, а затем добавить запись с этим значением.