|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Всем доброго дня! Подскажите, как задать уникальное значение по умолчанию в индексированном поле таблицы в виде: Zxxxxxxxxxxxxxx, где Z - буква "зет", ххх...х - 14 случайных цифр. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 15:32 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol, а слабо задать индекс "уникальные значения" и набрать в поисковике "маска ввода в access" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 16:00 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
sdku, Не слабо. Но такой вариант мне не подходит, т.к. поле типа "счетчик" с уникальными значениями не позволяет вносить в это поле изменения. А мне надо иногда добавлять строки из внешней таблицы с уже имеющимся значением в этом поле, а иногда - добавлять записи внутри БД. При этом поле в любом случае должно быть с уникальным значением. Для этого я и сделал его индексированным. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 16:17 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol, ну тогда почитайте про счетчик и уясните что если это ключ, то изменять его это нонсенс(да и вряд ли Вы это сможете сделать),а если это не ключ то как в числовое поле всунуть текст типа "Z1234..."? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 16:37 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
sdku, Возможно, вам просто не попадалась такая задача. Откликнитесь, гуру ACCESS! Уточню задачу. Есть таблица tИНВ в БД MS ACCESS. В ней есть текстовое поле strInv такого вида: первый символ - буква, остальные 14 - цифры. Это инвентарные номера. В эту таблицу иногда надо вносить "пачки" извне БД (файлы Excel) - запросом на обновление, а иногда - вводить вручную информацию через соответствующую форму, при этом поле strInv тоже должно заполняться какими-нибудь номерами. Чтобы не появлялось строк с одинаковыми инвентарными номерами, я сделал это поле индексированным (Совпадения не допускаются). Для отличия введенных вручную данных я решил в виде первой буквы инвентарного номера задать букву Z. Такой буквы нет среди данных извне БД. Для простоты решил задать значение по умолчанию для поля strInv - "Z" & CStr(Int(Rnd(Now())*99999999999999)). Этот вариант меня очень устроил, но все чаще выходит сообщение о нарушении уникальности поля strInv при "ручном" вводе. Может кто подскажет, как бы сформировать уникальное значение в данном случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 17:22 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol, почему именно такой формат? Возможно подойдёт GUID ? Иначе придётся самому писать функцию для генерирования. ИМХО ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 17:22 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol Не слабо. Но такой вариант мне не подходит, т.к. поле типа "счетчик" с уникальными значениями не позволяет вносить в это поле изменения. А мне надо иногда добавлять строки из внешней таблицы с уже имеющимся значением в этом поле, а иногда - добавлять записи внутри БД. При этом поле в любом случае должно быть с уникальным значением. Для этого я и сделал его индексированным. это набор противоречий - если значение Zxxxxxxxxxxxxxx уникально и уже занято, то ни руками, ни ногами, ни из внешней таблицы его второй раз не добавить... Вот какие твои действия если вчера внес руками Zxxxxxxxxxxxxxx, а сегодня этот же ключ прилетел из внешней таблицы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 17:53 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
vmag это набор противоречий - если значение Zxxxxxxxxxxxxxx уникально и уже занято, то ни руками, ни ногами, ни из внешней таблицы его второй раз не добавить... Вот какие твои действия если вчера внес руками Zxxxxxxxxxxxxxx, а сегодня этот же ключ прилетел из внешней таблицы ? Не прилетит: resol sdku, .... Для отличия введенных вручную данных я решил в виде первой буквы инвентарного номера задать букву Z. Такой буквы нет среди данных извне БД. Тут важно чтобы каждый независимый внешний источник записей имел свою начальную букву и поддерживал уникальность в пределах этого источника - тогда противоречий не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 21:33 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol ... Для простоты решил задать значение по умолчанию для поля strInv - "Z" & CStr(Int(Rnd(Now())*99999999999999)). Этот вариант меня очень устроил, но все чаще выходит сообщение о нарушении уникальности поля strInv при "ручном" вводе... 1. Нарушение происходит из-за того, что выражение для значения по умолчанию дало неуникальное значение или потому что оператор неудачно скорректировал поле strInv ? 2. Ваше выражение для значения по умолчанию дает 7 первых случайных цифр остальные - девятки. Какая степень случайности цифр важна? Может для инвентарного номера подойдут 14 разрадные инкрементные значения ? А если разряды еще перемешать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 22:34 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Если инвентарный номер повторяется (а это надо проверять/запрещать ещё на этапе присвоения) внутри одной организации это противоречит его сути. Если же это инв.разных организаций Дмитрий П. ...Тут важно чтобы каждый независимый внешний источник записей имел свою начальную букву и поддерживал уникальность в пределах этого источника - тогда противоречий не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 23:50 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Дмитрий П., Ну да, про букву Z, как признак руками я не углядел... Но это лишь усугубляет положение: - Собственно сам инвентарный номер , я так понимаю - должен быть уникальным, и это то, что стоит после буквы Z... - И если есть в БД такое же без буквы Z или такое же с любой другой буквой, то это значит, что всё-таки умудрились впихнуть в БД несколько книг под одним инвентарным номером (за что боролись - на то и напоролись) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 23:58 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol sdku, Не слабо. Но такой вариант мне не подходит, т.к. поле типа "счетчик" с уникальными значениями не позволяет вносить в это поле изменения. А мне надо иногда добавлять строки из внешней таблицы с уже имеющимся значением в этом поле, а иногда - добавлять записи внутри БД. При этом поле в любом случае должно быть с уникальным значением. Для этого я и сделал его индексированным. Создайте составной ключ. Посмотрите что это такое, вы можете при помощи него автоматически создавать комбинации индексов с использованием текста, числа, чего угодно. 1) Создайте уникальное поле в конструкторе (уникальное,значения повторяются) ,который по умолчанию всегда начинается на Z (значение поля по умолчанию равно Z) 2) Создайте второе поле у которого свойство значение по умолчанию ссылается на функцию в модуле (которая генерирует 14 случайных цифр). Помимо генерации случайных цифр, она должна пробежаться по уже существующим индексам и если есть такая комбинация, сгенерировать комбинацию еще раз (точка выхода из цикла - когда сгенеренное значение не будет совпадать с существующим уже в таблице и только потом вставить значение) Тип индекса - индексированное,значение не допускаются. Выделите шифтом в конструкторе эти два поля и сделайте ключевыми. 3) Функцию которая рандомно выставляет 14 цифр написать, или сами сможете? PS Можно такой же трюк повторить и с одним индексированным полем (который будет primary key в вашей таблице), куда будет добавляться Z+ ваши 14 рандомных чисел ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 00:30 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
генерация уникального ключа: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
проверку и вставку допишите сами?) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 00:53 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
перед тем как создавать БД надо ознакомится с предметом и многие вопросы отпадают тынц + составной ключ(индекс)-решение всех Ваших проблем (только помните что NULL<>NULL-оба поля индекса должны заполняться, а поле составного ключа оставить пустым вообще невозможно) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 01:03 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
vmag Дмитрий П., - Собственно сам инвентарный номер , я так понимаю - должен быть уникальным, и это то, что стоит после буквы Z... 001 и Z001 это разные номера А как будет отображаться 001 в числовом/счетчике поле? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 01:13 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Сергей Лалов Создайте составной ключ. Посмотрите что это такое, вы можете при помощи него автоматически создавать комбинации индексов с использованием текста, числа, чего угодно. 1) Создайте уникальное поле в конструкторе (уникальное,значения повторяются) ,который по умолчанию всегда начинается на Z (значение поля по умолчанию равно Z) 2) Создайте второе поле у которого свойство значение по умолчанию ссылается на функцию в модуле (которая генерирует 14 случайных цифр). Помимо генерации случайных цифр, она должна пробежаться по уже существующим индексам и если есть такая комбинация, сгенерировать комбинацию еще раз (точка выхода из цикла - когда сгенеренное значение не будет совпадать с существующим уже в таблице и только потом вставить значение) Тип индекса - индексированное,значение не допускаются. Выделите шифтом в конструкторе эти два поля и сделайте ключевыми. 3) Функцию которая рандомно выставляет 14 цифр написать, или сами сможете? PS Можно такой же трюк повторить и с одним индексированным полем (который будет primary key в вашей таблице), куда будет добавляться Z+ ваши 14 рандомных чисел Спасибо за дельный совет! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 12:43 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
pesol Панург resol, почему именно такой формат? Возможно подойдёт GUID ? Иначе придётся самому писать функцию для генерирования. ИМХО вам Панург дело говорит ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 12:52 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Всем спасибо за участие! Сергей Лалов - ваш вариант идеально подошел в моей ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 12:59 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol Сергей Лалов - ваш вариант идеально подошел в моей ситуации. Только нужно иметь ввиду, что пункт 2 там слабое место, и чем дальше - тем будет слабее... Со временем функция рандома все чаше будет генерировать новое значение не за один и не за два захода ибо будет натыкаться на уже занятые... Я как-то делал карточную игру "Очко" для синклера, там нужно было случайным образом перемешивать карты, - по такой методике (генерить-проверять-и если уже выбрано, опять генерить) перетасовка колоды проходила от 10 сек до 1 минуты - оставалось выбрать последние несколько карт, а рандом все долбил и долбил в уже выбранные... Пришлось существенно изменить алгоритм... Я бы рандом заменил на возрастающий счетчик и тогда значения были бы за один заход типа: z00000000000001 z00000000000002 z00000000000003 Да и сразу по первым нулям видно откуда прилетело... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 13:27 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
vmag, Очень хорошая мысль. Спасибо. Я подумаю насчет такого варианта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 15:39 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Ради спортивного интереса собрал тестовый пример, который рандомно заполняет ключевое текстовое поле в таблице , в формате Z+14 значений. С выводом количества проходов в отдельное поле. Чтобы не мелочится, сразу добавляется по 1000 ключей. Добавление идет с проверкой значений существующих ключей. Можно сказать что ждать совпадения при 14 знаках надо очень долго. Если в моем примере не по 1000 ключей добавлять, а по одному, то задержки вообще никакой не будет) Собрал по 1000, ради интереса посмотреть вероятность генерации повторного значения (на цикле 1000 естественно подтупливает, так как одновременно идет проверка и вычисление). Функцию можно использовать в общем то и при одиночном добавлении новой строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 16:15 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
vmag, В таможне такой же способ учета присвоения номеров ДТ (по старому ГТД) как вы подсказали ТС. В ФТС долго боролись с автоматизацией процессов, чтобы оставить нули при формировании счетчика (элемент 3 в примере ниже) Формат номера ГТД: 23562389/04122019/0000125 Номер ГТД расшифровывается следующим образом: элемент 1 - код таможенного органа, зарегистрировавшего ДТ [ ГТД ]. элемент 2 - дата регистрации ДТ [ ГТД ] (день, месяц, две последние цифры года); элемент 3 - порядковый номер ДТ [ ГТД ], присваиваемый по журналу регистрации ДТ [ ГТД ] таможенным органом, зарегистрировавшим ДТ [ ГТД ] (начинается с единицы с каждого календарного года). Все элементы указываются через знак разделителя "/", пробелы между элементами не допускаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 16:28 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
resol sdku, Возможно, вам просто не попадалась такая задача... "Общие подходы к присвоению инвентарных номеров основным средствам указаны в Методических указаниях по бухгалтерскому учету основных средств (Приказ Минфина РФ № 91н от 13.10.2003 (ред. от 24.12.2010)) и Инструкции № 157н (Приказ Минфина РФ от 01.12.2010)." Иначе Вы рискуете "изобрести" продукт который не будет соответствовать руководящим документам и никому не будет нужен даже даром Сейчас Вы и занимаетесь этим "изобретательством" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 16:31 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
Сергей Лалов Формат номера ГТД: 23562389/04122019/0000125 ... две последние цифры года)... или четыре? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 16:39 |
|
Уникальное значение по умолчанию в индексированном поле таблицы
|
|||
---|---|---|---|
#18+
ИВП Сергей Лалов Формат номера ГТД: 23562389/04122019/0000125 ... две последние цифры года)... или четыре? две две, это на автомате вывелось, вот так верно 23562389/041219/0000125 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 16:42 |
|
|
start [/forum/topic.php?fid=45&msg=39898052&tid=1610341]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 311ms |
total: | 461ms |
0 / 0 |