Генерация инкрементных (или случайных без дублированных данных) чисел из случайно сгенерированного числа в поле Access Calculated Query - PullRequest
0 голосов
/ 07 сентября 2018

Цель: мне нужен запрос доступа для случайного генерирования 3-значных чисел, которые используются для создания уникального серийного номера для всех серийных номеров, созданных в конкретную дату.Половина серийного номера генерируется с помощью даты отгрузки, и поэтому трехзначное значение должно быть полностью уникальным для возвращенного набора записей (может быть до 100 записей за данный день).

Для генерациислучайное число, я использую следующую функцию:

Int ((900-100 + 1) * Rnd () + 100)

Эта функция генерирует число случайным образом от 100 до 900 дляпервая запись, возвращенная в запросе.Проблема состоит в том, что каждая запись ниже этой 1-й записи содержит один и тот же номер, поэтому создаются дублированные серийные номера для каждой записи, возвращаемой в запросе.

Мне нужно либо реализовать функцию приращения, которая может увеличить значение исходного случайно сгенерированного числа на 1, либо создать синтаксис, который сообщает Access для случайного генерирования чисел без диапазона 100-900 для всех возвращаемых записейбез возможности присвоения дубликата номера.

Большое спасибо заранее за помощь!

Эрик

1 Ответ

0 голосов
/ 07 сентября 2018

Вы должны seed Rnd. Традиционный метод заключается в таймере для этого:

=Int((900-100+1)*Rnd(-Timer())+100)

Чтобы запретить дублирование, помните, что случайное является случайным, поэтому единственный способ - проверить, что каждое сгенерированное число не использовалось ранее - и, если оно имело место, снова запустить функцию.

Это означает, что при приближении к пределу потребуется все больше и больше циклов для генерации неиспользуемого числа.

...