Вы не сказали нам, какую систему баз данных вы используете, но по звуку вы говорите о таблицах Paradox в Delphi. Если это так, столбец autoInc может работать, хотя, если я правильно помню, вы должны быть очень осторожны при перемещении данных с помощью столбцов Paradox autoInc, потому что они восстанавливаются с нуля при перемещении.
Как уже упоминалось, вы можете использовать GUID - sysutils.function CreateGUID (out Guid: TGUID): HResult; - они всегда будут уникальными, но обратная сторона в GUIDS в том, что упорядочение по этим клавишам не будет интуитивно понятным и, вероятно, будет бессмысленным, поэтому вам потребуется какой-то столбец метки времени, чтобы поддерживать порядок вставок, что может быть важно. Кроме того, GUID является довольно длинной символьной строкой и не очень эффективен для использования в качестве учетной записи #, которая предположительно будет первичным или внешним ключом во многих таблицах.
Так что я бы остановился на autoInc, если вы хотите что-то автоматическое, но если вам нужно переместить данные и сохранить исходные ключи, загрузите исходные автоинкены в виде целочисленных столбцов на их новом месте, или вы можете повредить их. вся ваша база данных. (Я полагаю, что есть другие сценарии, которые также приводят к сбросу autoIncs в таблицах Paradox - исследуйте это, если это уместно - уже давно, с тех пор как я использовал Pdox, и это может не быть проблемой с другими базами данных плоских файлов)
Если вы действительно используете сервер базы данных - SQLServer, Oracle, Interbase и т. Д., Они все имеют функции autoInc / indentity или генератора, иногда в сочетании с триггером - это ваш лучший вариант.
Ответ Дорина также является отличным решением, если вы хотите сами справиться с этим из своего кода Delphi. Создайте глобальную поточно-ориентированную функцию для ее реализации, которая обеспечит очень высокий уровень безопасности.
НТН