ПредишенСледващото

Какъв е проблемът
MS Access не ни дава възможност да изберете начина на което идентифицира еднозначно ред. Единственият вариант - на тезгяха. Все пак, за да му се признае - в повечето случаи това е достатъчно.

Трудностите започват, когато искате да се консолидират данни от различни бази данни. Очевидно е, че дори и използването на м с произволни стойности не гарантира липсата на конфликт. За да решите такива ситуации не е лесно, най-вече заради факта, че освен в процес на изготвяне и още една основна маса от подчинените таблици в тях. Репликация повдига подобни трудности.

Друга неприятна черта на брояч yavlaetsya че понякога стойността все още е повторен, особено при липсата на уникален индекс за това поле.

начини за решаване на
Традиционният метод за генериране на уникална стойност на базата на специална маса за създаване на поле, което варира в зависимост от даден алгоритъм при всеки нов адрес към клиентското приложение към него. С получените по този начин може да се извършва дори някои манипулации ценности, написани на ключовото поле. Недостатък на метода е неговата очевидна сложност и съмнително надеждност. По-специално, функцията използва за производство на такъв уникален идентификатор, не може да се използва в "Default" областта на недвижимите имоти в таблицата.

Друг метод е да се разделят контра варира за всеки от бази. Този метод не е дори и лоши. Недостатък е необходимостта да се планират предварително броя и размера варира. В противен случай, някой може да не е достатъчно място. В допълнение, инсталирането на първоначалните стойности на гишетата все още се нуждае по-нататъшни действия.

Третият подход включва създаването на изразяване, в резултат на което ще бъде стойност, подходяща за използване като уникален идентификатор. Той също така се нуждае от възможност да се уточни това в "Default" областта на недвижимите имоти в таблицата. По-долу са две такива изрази са описани подробно: един низ и друга цифрова тип.

Тип низ идентификатор
Подготовка уникална стойност в този случай се основава на генериране на линии от 16 символа. Първо там е най-лявата от аргументите на командния ред. командния ред стойност може да се настрои не само в параметър старт / CMD, но и от програмата:

application.setoption "аргументи от командния ред", "w"

Следван от шестнадесетичен стойност на текущата дата и час. Останалите 7 героите взема произволен номер (в шестнадесетичен формат). Резултатът е, както следва:

ID = ляво (команда (), 1) хекс (сега () Mod 2 ^ 16) шестнадесетичен ((сега () - вътр (сега ())) * 65535) шестнадесетичен (RND () * (2 ^ 28-1))

наляво (команда (), 1), всеки подходящ символ (за да бъде на първо място в аргумент на командния ред)
шестнадесетичен (сега () мод 2 ^ 16) към датата на модула 65 536 (за да стане не повече от 4 знака)
шестнадесетичен ((сега () - вътр (сега ())) * 65535) времева скала 65535 (това не е повече от 4 знака)
шестнадесетичен (RND () * (2 ^ 28-1)) случайно число в диапазона от 0 до 2 ^ 28-1 (това не е повече от 7 знака)

С този метод, броят на клиентите в системата ограничен от броя на валидни знаци за първата (вляво) байт в реда. Разбира се, тези, които няма да намерите по-малко от сто. Ако имате нужда от повече, ние можем да се увеличи броят на първоначалните знаци. размер ID в същото време, разбира се, също се увеличи. Допълнително предимство е, че този номер може да бъде използвана без никакви промени, като ключът за дървовидна структура.

валута на типа на идентификатора
Този метод за създаване на единен идентификационен код, е разширение на предишната. Тя ви позволява да се намали наполовина размера на областта и да ускори всички операции с нея, тъй като работата с числа е по-бързо от низ. Функция се получава, обаче, по-труден за носене:

ID = IIF (Val (команда ())> 63, 1, 1) * (ccur (ABS (Val (команда ()) - 64) * (2 ^ 57) / 10000) + ccur (ccur ((междинно съединение ( сега ()) Mod 2 ^ 15) * (2 ^ 42) / 10000) + ccur (((сега () - междинно съединение (сега ())) * 65535) * (2 ^ 26) / 10000) + ccur (RND () * (2 ^ 26 - 1)) / 10000))


командния ред аргумент (който е зад / CMD) трябва да е число от 1 до 127. Това е броят на клиентите, може да бъде в една система с използване на метода за генериране на уникален идентификатор. Задаване на стойността на аргумент, например, 127 със следната команда:

application.setoption "аргументи от командния ред", "127"


Броят на вида валута е в диапазона от - (2 ^ 63) / до 10.000 (2 ^ 63-1) / 10000. Поради това, през цялото време е необходимо да се раздели с 10 000 и превръщане на междинните резултати от вида на валутата, тъй като достъпът се стреми непрекъснато да се използва двойно. Ако подадете стойност по вид валута като цяло число, а след това използването на цифрите му е, както следва:

Използване на битове в идентификатора
Старши 63-та марка (от аргумент от командния ред)
6 (от 57-ти до 62-ти) Брой (от аргумент на команди)
15 (от 42-ти до 56-ти) Дата
16 (от 26-ти до 41-ти) Време
При 26 (с 0-ия до 25-ия) на случайни числа


Знакът на (повече или по-малко от половината от стаите)

IIF (Val (команда ())> 63, 1, 1)


Брой на малки (1 63) или по-големи (64 127) половини. За да се побере във валутата не разполага с номера на типа по-голямо от 63. Поради това, използвайте функцията корема.

ccur (ABS (Val (команда ()) - 64) * (2 ^ 57) / 10000)


Дата. Modulo 2 ^ 15 позволява да се вмъкнем в резервираните 15 бита, като се запазва уникалността с около 80 години.

ccur (ccur ((междинно съединение (сега ()) Mod 2 ^ 15) * (2 ^ 42) / 10000)


Време до

1.3 секунди. В диапазона от 00:00:00 до 23:59:59 е 0 до 0,99999 и мащабирани до необходимите 16 бита чрез умножаване по 65535.

ccur (((сега () - междинно съединение (сега ())) * 65535) * (2 ^ 26) / 10000)


Случайното число вариращо от 0 до 2 ^ 26 - 1. диапазон води до намаляване на повторение.

ccur (RND () * (2 ^ 26 - 1)) / 10000))


заключение
Вторият начин е очевидно за предпочитане, тъй като позволява по-компактни идентификатори. В допълнение, той го прави относително безболезнено да премине от използването на броячи, като работа с низове е много по-различно от работа с дълги или валутни видове, как те се различават един от друг.

Въпреки това, има и недостатъци. На първо място, това е за ограничен брой клиенти в системата (не повече от 127), поради сложността на байт номер свиване кадър 8. Също така, няма гаранция, че случайни числа не се повтарят в рамките на 1,3 секунди, когато ключовият операцията се определя единствено уникален генератор на случайни числа. В случай на такова повторение възниква дублиране грешка, която ще изисква повтори цялата операция за добавяне на записи. Въпреки това, ние трябва да отдадем почит access'sovskoy RND () функция: той е достатъчно дълъг, за да се генерира неповтарящо поток от ценности.

Подкрепете проекта - споделете линка, благодаря!