![]() |
|
Модераторы: Akina |
![]()
|
|
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
Всем здравствуйте!
У меня База (Access 2003) расчитана на несколько пользователей. Подскажите как лучше организовать ввод нового заказа, а если точнее программно отслеживать чтоб Номер_Заказа не дублировался и в новой записи увеличивался на 1. Сначала хотел использовать DMax, потом надумал использовать отдельную таблицу, где содержится последний Номер_Заказа (обновляется при вводе Номера_Заказа).... В общем я в растерянности, посоветуйте как быть, кстати заказов в таблице будет около 3 тыс, может чуть больше. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Вот зачем тебе нумеровать их по порядку? или вернее не так - зачем использовать порядковую нумерацию в качестве ключа?
Используй синтетический рандомный ID, а номер считай, исходя из даты и времени занесения записи (при коллизиях - и ИД оператора). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Стоит всегда использовать автоинкрементное поле в качестве ключа.
Для пользователя стоит завести отдельное поле номера. Как сформировать новый номер: Вариант 1. Забить и использовать nz(DMax(),0) + 1. Если пользователей мало, то работает нормально. Вариант 2. На момент вставки блокировать таблицу для изменений. При этом возникает проблема - могут возникать проблемы, когда один пользователь редактирует, а второй вставляет, произойдет ошибка. Что не очень хорошо. Вариант 3. Для номеров заводится отдельная таблица с необходимыми полями. На время вставки новой записи она блокируется. Т.е. ограничение будет заключаться в том, что нельзя будет произвести две вставки одновременно. Это довольно просто обрабатывается. |
|||
|
||||
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
В качестве ключа у меня и так используется автоинкримент.
Этот вариант конечно проще сделать, только у меня возникает вопрос: если теоретически два пользователя одновременно вставляют новую запись, то как мне кажется DMax() им выдаст одинаковое значение? |
|||
|
||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |