Тази тема описва процедурата за сортиране на ip адреси, съхранени в база данни на Access.
Въведение
Ако работите с IP адреси, вероятно вече знаете, че това не е толкова просто, колкото работата с текст или числа. Това е така, защото IP адресът всъщност е колекция от четири числови стойности, разделени с точка (.), където всяка стойност е число между 0 и 255. Следващата таблица показва данни, преди да се приложи ред на сортиране.
ИД на машината |
Служител |
Местоположение |
IP адрес |
---|---|---|---|
1 |
... |
... |
123.4.245.23 |
2 |
... |
... |
104.244.253.29 |
3 |
... |
... |
1.198.3.93 |
4 |
... |
... |
32.183.93.40 |
5 |
... |
... |
104.30.244.2 |
6 |
... |
... |
104.244.4.1 |
Сортирането на IP адреси в Access е предизвикателство, защото Access не предоставя специален тип данни за съхраняване на IP адреси. Въпреки че IP адресът е просто колекция от числа, не можете да съхранявате IP адреси в числово поле. Това е така, защото числовото поле поддържа само една десетична точка (.), докато IP адресът съдържа три точки (.). Това означава, че трябва да съхранявате адресите в текстово поле.
Тъй като съхранявате IP адреси в текстово поле, не можете да използвате вградените бутони за сортиране в Access, за да сортирате адресите по смислен начин. Бутоните за сортиране винаги сортират стойностите в текстово поле по азбучен ред дори ако знаците са числа. С други думи, адресите са сортирани по първата цифра, а след това по втората цифра и т.н., вместо по числовите стойности, които съставят адреса. Следващата таблица показва адресите от предишната таблица, сортирани по азбучен ред в полето IPAddress.
ИД на машината |
IP адрес |
---|---|
3 |
1.198.3.93 |
2 |
104.244.253.29 |
6 |
104.244.4.1 |
5 |
104.30.244.2 |
1 |
123.4.245.23 |
4 |
32.183.93.40 |
Адресите, които започват с 1, се показват преди адресите, които започват с 2 и т.н. Следващата таблица показва адресите в правилния възходящ ред.
ИД на машината |
IP адрес |
---|---|
3 |
1.198.3.93 |
4 |
32.183.93.40 |
5 |
104.30.244.2 |
6 |
104.244.4.1 |
2 |
104.244.253.29 |
1 |
123.4.245.23 |
За да улесните разбирането на стъпките, включени в сортирането на тези адреси, трябва да разделите IP адресите на четири числови части. Адресите трябва да са сортирани по първата част, а след това за всяка стойност в първата част, а след това по втората част и т.н. Таблицата показва всяка част в различна колона и тъй като колоните съдържат прости числови стойности, става възможно колоните да се сортират от ляво надясно във възходящ ред, както е показано в следващата таблица.
Част от част |
Част ІІ |
Част ІІІ |
Част IV |
---|---|---|---|
1 |
198 |
3 |
93 |
32 |
183 |
93 |
40 |
104 |
30 |
244 |
2 |
104 |
244 |
4 |
1 |
104 |
244 |
253 |
29 |
123 |
4 |
245 |
23 |
Сортирането на четирите части поотделно е трик за сортирането на IP адреси. В процедурата, която следва, създавате заявка, която освен полето за IP адрес включва четири изчисляеми колони, където всяка колона съхранява част от адресните стойности. Първата изчисляема колона ще съдържа първата числова част на адреса, втората изчисляема колона ще съдържа втората числова част на адреса и т.н. Вместо да сортира записите по полето IPAddress, заявката ще сортира записите по четирите изчисляеми колони.
Създаване на заявката
Ще създадете заявка за избиране с име Sorted IPAddresses, която показва записите във възходящ ред на IP адресите. Да предположим, че текущата база данни има таблица с име MachineDetails, която включва текстово поле с име IPAddress.
-
Щракнете върху Създаване >проектиране на заявка.
-
Изберете Добавяне на таблици (Показване на таблица в Access) и плъзнете Подробни данни за машината в горната част на изгледа за проектиране.
-
Плъзнете полетата MachineID и IPAddress в мрежата на заявката за проектиране.
-
Сега сте готови да добавите изчисляемите колони. В първата празна колона отдясно въведете израза PartI: Val(Left([IPAddress];(InStr(1;[IPAddress];".") -1))) в реда Поле . Изразът връща знаците преди първия период (.) в полето IPAddress.
Сега прегледайте израза. Тъй като не знаете колко цифри съставляват първата част от адреса, можете да използвате функцията InStr , за да намерите позицията на първия период. Изваждането на 1 (за да се изключи периодът) връща броя на цифрите в първата част. След това използвайте това число с функцията Left , за да извлечете толкова знаци, започвайки от най-левия знак, от полето IPAddress. И накрая, извиквате функцията Val , за да преобразувате знаците, върнати от функцията Left , в число. Тази последна стъпка е необходима, защото базовият тип данни е "Текст".
-
Запишете заявката, като щракнете върху Запиши в лентата с инструменти за бърз достъп. Добра идея е да направите това след всяка междинна стъпка.
-
Добавете колоната за втората адресна част. В колоната отдясно на PartI въведете PartII: Val(Mid([IPAddress],InStr(1;[IPAddress];".") +1;InStr(InStr(1;[IPAddress];".") +1;[IPAddress];".") -InStr(1;[IPAddress];".") -1)) в реда Поле . Изразът връща знаците, които са разположени между първата и втората точки в полето IPAddress.
Отново прегледайте израза. Тъй като не знаете колко цифри представляват втората част от адреса или точно къде започва втората част (тъй като не е колко дълго е първата част), можете да използвате функцията InStr , за да намерите позициите на точките. След това можете да използвате функцията Mid , за да извлечете знаците след първия период, но преди втория период. И накрая, извиквате функцията Val , за да преобразувате знаците, върнати от функцията Mid , в число. Тази последна стъпка е необходима, защото базовият тип данни е "Текст".
-
Добавете колоната за третата адресна част. В колоната отдясно на ЧастII въведете PartIII: Val(Mid([IPAddress],InStr(1;[IPAddress];".") +1;[IPAddress];".") +1;InStr(InStr(InStr(1;[IPAddress];".") +1;[IPAddress];".") +1;[IPAddress];".") -InStr(InStr(1;[IPAddress];".") +1;[IPAddress];".") -1)) в реда Поле . Изразът връща знаците, които са разположени между втората и третата точки в полето IPAddress.
Отново прегледайте израза. Тъй като не знаете колко цифри представляват третата част от адреса или точно къде започва третата част (тъй като не знаете колко дълго са първата и втората част), можете да използвате функцията InStr , за да намерите позициите на точките. След това можете да използвате функцията Mid , за да извлечете знаците след втория период, но преди третия период. И накрая, извиквате функцията Val , за да преобразувате знаците, върнати от функцията Mid , в число. Тази последна стъпка е необходима, защото базовият тип данни е "Текст".
-
Добавете колоната за четвъртата и последната адресна част. В колоната отдясно на PartIII въведете PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1;[IPAddress];".") +1;[IPAddress];".") +1;[IPAddress];"."))) в реда Поле . Изразът връща знаците след последния период.
Отново прегледайте израза. Ключът е да намерите местоположението на третия период и след това да извлечете всички знаци след него. Тъй като не знаете точно къде се намира третият период, трябва да се обадите на функцията InStr три пъти, за да намерите позицията на третия период. След това използвате функцията Len , за да изчислите броя на цифрите в четвъртата част. Броят на върнатите цифри след това се използва с функцията Right , за да се извлече толкова знаци от дясната част на полето IPAddress. И накрая, извиквате функцията Val , за да преобразувате знаците, върнати от функцията Mid , в число. Тази последна стъпка е необходима, защото базовият тип данни е "Текст".
-
Задайте Реда Сортиране на всичките четири изчисляеми колони на Възходящ.
Важно Редът Сортиране на колоната IPAddress трябва да бъде оставен празен.
Ако искате да сортирате по други стойности на полета, освен по адресите, поставете полетата отляво или отдясно на всичките четири изчисляеми колони. Не поставяйте другите полета за сортиране между изчисляемите колони.
-
Следващата стъпка е да скриете четирите изчисляеми колони от листа с данни. Но преди да направите това, превключете към изглед на лист с данни, за да видите резултата от изразите в изчисляемите колони. Следващата таблица показва колоните, които ще видите в изглед на лист с данни.
ИД на машината
IP адрес
Част от част
Част ІІ
Част ІІІ
Част IV
3
1.198.3.93
1
198
3
93
4
32.183.93.40
32
183
93
40
5
104.30.244.2
104
30
244
2
6
104.244.4.1
104
244
4
1
2
104.244.253.29
104
244
253
29
1
123.4.245.23
123
4
245
23
-
Превключете обратно към режим на проектиране и изчистете отметката от квадратчето в реда Покажи на всичките четири изчисляеми колони. Това предотвратява показването на изчисляемите колони в изглед на лист с данни.
-
Ако желаете, задайте критерии за изключване на записи от заявката.
-
Превключете към изглед на лист с данни, за да видите записите в сортиран ред. Ще видите записите, които са правилно сортирани във възходящ ред на IP адресите.
Още използвания за сортирани IP адреси
Проверка на IP адреси по време на въвеждане на данни
Ако искате да проверите адресите, без да пишете код, можете да направите това до известна степен, като зададете свойството InputMask на полето на ###.###.###.##; 0;" " и свойството Format на полето за IP адрес, за да &&&&&&&&&&&&.
Какво прави маската за въвеждане? Когато започнете да въвеждате в полето за адрес, маската за въвеждане не ви позволява да въвеждате знаци, различни от цифри и интервали, между трите точки. Ако числовата част е двуцифрено число, оставете третата цифра празна или вместо това въведете интервал. Обърнете внимание, че тази маска за въвеждане не предупреждава потребителя, ако пропусне да въведе една или повече части от адреса или въведе само интервали, а не числова стойност. Например "345. .3. " ще бъде приет като валиден адрес.
Какво прави форматът на показване? Когато приключите с въвеждането и напуснете полето, форматът за показване премахва интервалите в адреса и показва само числата и точките. Така че ако сте въвели "354.35 .2.12 ", адресът се показва като "354.35.2.12". Обърнете внимание, че ако щракнете в адреса или натиснете клавиша F2 (за да влезете в режим на редактиране), когато адресът бъде избран, интервалите ще се появят отново.
Съвет: Ако искате да копирате адрес, преминете към предишната колона или контрола, натиснете клавиша TAB, за да изберете форматирания адрес, и след това щракнете върху Копирай. По този начин няма да копирате адресния низ, който съдържа интервали.
Сортиране на записи във формуляр или отчет по IP адреси
Ако трябва да създадете формуляр или отчет, в който записите са сортирани по IP адреси, базирайте новия обект на заявка, която сортира адресите, както е описано по-горе, а не върху таблицата, която съхранява адресите.