Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Значение поля увеличивать на 1


Автор: Woodlin 8.11.2010, 14:19
Всем здравствуйте!

У меня База (Access 2003) расчитана на несколько пользователей. Подскажите как лучше организовать ввод нового заказа, а если точнее программно отслеживать чтоб Номер_Заказа не дублировался и в новой записи увеличивался на 1.

Сначала хотел использовать DMax, потом надумал использовать отдельную таблицу, где содержится последний Номер_Заказа (обновляется при вводе Номера_Заказа).... 
В общем я в растерянности, посоветуйте как быть, кстати заказов в таблице будет около 3 тыс, может чуть больше.

Автор: Akina 8.11.2010, 14:33
Вот зачем тебе нумеровать их по порядку? или вернее не так - зачем использовать порядковую нумерацию в качестве ключа?
Используй синтетический рандомный ID, а номер считай, исходя из даты и времени занесения записи (при коллизиях - и ИД оператора).

Автор: bopoha 8.11.2010, 23:27
Стоит всегда использовать автоинкрементное поле в качестве ключа.
Для пользователя стоит завести отдельное поле номера.

Как сформировать новый номер:
Вариант 1.
Забить и использовать nz(DMax(),0) + 1.
Если пользователей мало, то работает нормально.

Вариант 2.
На момент вставки блокировать таблицу для изменений.
При этом возникает проблема - могут возникать проблемы, когда один пользователь редактирует, а второй вставляет, произойдет ошибка.
Что не очень хорошо.

Вариант 3.
Для номеров заводится отдельная таблица с необходимыми полями.
На время вставки новой записи она блокируется.
Т.е. ограничение будет заключаться в том, что нельзя будет произвести две вставки одновременно.
Это довольно просто обрабатывается.

Автор: Woodlin 9.11.2010, 06:33
В качестве ключа у меня и так используется автоинкримент.

Цитата(bopoha @  9.11.2010,  02:27 Найти цитируемый пост)
Вариант 1.
Забить и использовать nz(DMax(),0) + 1.
Если пользователей мало, то работает нормально.

Этот вариант конечно проще сделать, только у меня возникает вопрос: если теоретически два пользователя одновременно вставляют новую запись, то как мне кажется DMax() им выдаст одинаковое значение?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)