Форум » Clipper » Сквозная нумерация документов при работе в сети. » Ответить

Сквозная нумерация документов при работе в сети.

Dima: Кто и как решал этот вопрос ? В однопользовательском режиме как бы все просто. Держим для этого в базе поле с номером документа + индекс по этому полю. При добавлении документа следующий номер вычисляем так: Переключаемся на индекс (о котором писал выше) , делаем dbgobottom() и присваиваем переменной значение из поля +1 И тд В многопользовательском режиме такой механизм будет глючить

Ответов - 27, стр: 1 2 All

Pasha: Я эти средства делал немного для других целей, для гарантированного обеспечения уникального ключа. А начать с 1000 проще простого: dbAppend() Field->Numer := 1000 и можно затем использовать описанные выше средства.

PSP: Pasha пишет: См. tests/letoudf.prg, первую функцию. Спасибо. Посмотрю.

SergKis: Pasha пишет: Я эти средства делал немного для других целей, для гарантированного обеспечения уникального ключа. А начать с 1000 проще простого: dbAppend() Field->Numer := 1000 Т.е. решение фиктивный документ, но это не есть красиво. Может добавить в функцию еще параметры (управляющий индекс первый) диапозон вхождения: второй (min), третий (max). Тогда если 1 не входит в диапозон получим 1001. Или как-то иначе. Ведь решение гарантированного обеспечения уникального ключа - AUTOINCREMENT


Pasha: PSP пишет: Спасибо. Посмотрю. Только там еще версия без проверки. С проверкой я скину вечером. Прогнал тест: 2 клиента одновременно добавляют в таблицу несколько сот тысяч записей с формированием ключа. Повторы не обнаружены, как и ожидалось. Погоды стоят предсказанные (С).

PSP: Pasha пишет: С проверкой я скину вечером. Да, это я понял.

Pasha: SergKis пишет: Т.е. решение фиктивный документ, но это не есть красиво. Может добавить в функцию еще параметры (управляющий индекс первый) диапозон вхождения: второй (min), третий (max). Тогда если 1 не входит в диапозон получим 1001. Или как-то иначе. Ведь решение гарантированного обеспечения уникального ключа - AUTOINCREMENT Добавлю, и еще проверку переполнения тоже. Я оставлю эту функцию в hrb, так что ее можно модифицировать для себя как угодно. А autoincrement не всегда удобно использовать. По ключевому полю в любом случае необходим индекс, а раз есть индекс - можно обойтись и без автоинкремента. Да и ключ иногда хочется сделать символьным.

SergKis: Паша, спасибо за объяснения и терпение !



полная версия страницы