Сортировка IP-адресов в Access

В этой статье описана процедура сортировки IP-адресов, которые хранятся Access базе данных.

Введение

Если вы работаете с IP-адресами, то знаете, что это не так просто, как работа с текстом или числами. Это потому, что IP-адрес на самом деле является коллекцией из четырех числных значений, разделенных определенной периодом (.), где каждое значение является числом в промежутке от 0 до 255. В следующей таблице показаны данные до того, как будет применен какой-либо порядок сортировки.

MachineID

Сотрудник

Местонахождение

IPAddress

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-адреса хранятся в текстовом поле, встроенные кнопки сортировки в Access нельзя использовать для сортировки адресов по содержательному способу. Кнопки сортировки всегда сортировать значения в текстовом поле в алфавитном порядке, даже если символы являются числами. Другими словами, адреса сортировать по первой цифре, затем по второй цифре и так далее, а не по числу, которые составляют адрес. В таблице ниже показаны адреса из предыдущей таблицы, отсортенные в алфавитном порядке по полю IPAddress.

MachineID

IPAddress

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 и так далее. В таблице ниже показаны адреса в правильном порядке возрастания.

MachineID

IPAddress

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-адреса на четыре числимые части. Адреса нужно отсортировать по первой части, а затем по каждому значению в первой части, по второй части и так далее. Каждая часть таблицы отображается в разных столбцах, поэтому столбцы, которые имеют простые численные значения, можно сортировать столбцы слева направо в порядке возрастания, как показано в таблице ниже.

Parti

PartII

PartIII

PartIV

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.

  1. Откройте вкладку Создание и выберите пункт Конструктор запросов

  2. Выберите "Добавить таблицы"("Добавление таблицы Access 2013 ") и перетащите "Сведения о компьютере" в верхний раздел конструктора.

  3. Перетащите поля MachineID и IPAddress в сетку конструктора запросов.

  4. Теперь вы готовы добавить вычисляемые столбцы. В первом пустом столбце справа введите выражение PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".) -1))) в строке "Поле". Выражение возвращает знаки, предшествующие первому периоду (.). в поле IPAddress.

    Теперь просмотрите выражение. Поскольку вы не знаете, сколько цифр составляют первую часть адреса, для поиска позиции первой точек используется функция InStr. При вычитание 1 (чтобы исключить период) возвращается количество цифр в первой части. Затем используйте это число вместе с функцией Left, чтобы извлечь эти символы из поля IPAddress, начиная с самого левого знака. Наконец, функция Val преобразует символы, возвращаемые функцией Left, в число. Это последний шаг необходим, так как в его основном типе данных — "Текст".

  5. Сохраните запрос, нажав кнопку "Сохранить" на панели быстрого доступа. Это лучше делать после каждого промежуточного шага.

  6. Добавьте столбец для второй адресной части. В столбце справа от PartI введите PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".) +1,InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -InStr(1,[IPAddress],".") -1)) встроке "Поле". Выражение возвращает символы, которые находятся между первой и второй периодами в поле IPAddress.

    Еще раз просмотрите выражение. Так как вы не знаете, сколько цифр составляют вторую часть адреса или точно откуда начинается вторая часть (так как она не начинается), для поиска позиций точек периодов используется функция InStr. Затем с помощью функции Mid извлекаются символы, которые следуют за первой, но предшествуют второй. Наконец, функция Val называется для преобразования возвращаемого знака функции Mid в число. Это последний шаг необходим, так как в его основном типе данных — "Текст".

  7. Добавьте столбец для третьей адресной части. В столбце справа от PartII введите PartIII: Val(Mid([IPAddress],InStr(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 в число. Это последний шаг необходим, так как в его основном типе данных — "Текст".

  8. Добавьте столбец для четвертой и последней части адреса. В столбце справа от PartIII введите PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(1,[IPAddress],".) +1,[IPAddress],".") +1,[IPAddress],"."))) в строке "Поле". Выражение возвращает символы, которые следуют за последней периодом.

    Еще раз просмотрите выражение. Важно найти положение третьего периода, а затем извлечь все последующие символы. Поскольку вы не знаете точно, где находится третий период, функцию InStr нужно вызвать три раза, чтобы найти позицию третьего периода. Затем с помощью функции Len можно вычислить количество цифр в четвертой части. Возвращаемая цифра затем используется в функции Right для извлечения этого количества знаков из правой части поля IPAddress. Наконец, функция Val называется для преобразования возвращаемого знака функции Mid в число. Это последний шаг необходим, так как в его основном типе данных — "Текст".

  9. Задаем для строки "Сортировка" всех четырех вычисляемых столбцов по возрастанию.

    Важно    Строка "Сортировка" в столбце IPAddress должна быть пуста.

    Если вы хотите отсортировать значения по другим полям, а также по адресам, поместите поля слева или справа от всех четырех вычисляемых столбцов. Не поместите другие поля сортировки между вычисляемой колонкой.

  10. Далее необходимо скрыть четыре вычисляемых столбца в таблице. Но перед этим переключение в представление таблицы для просмотра результатов выражений в вычисляемом столбце. В следующей таблице показаны столбцы, которые вы увидите в представлении таблицы.

    MachineID

    IPAddress

    Parti

    PartII

    PartIII

    PartIV

    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

  11. Переключиться обратно в конструктор и сменить его в строке "Показать все четыре вычисляемого столбца". Это предотвращает отображение вычисляемой таблицы в представлении таблицы.

  12. При желании можно указать условия исключения записей из запроса.

  13. Переключение в таблицу для просмотра записей в порядке сортировки. Вы увидите записи, которые правильно отсортировали по возрастанию IP-адресов.

Другие применения сортировки IP-адресов

Проверка IP-адресов во время ввода данных

Если вы хотите проверить адреса без написания кода, это можно сделать в ограниченной степени, заявив для свойства InputMask поля ###.###.#;0;". " и свойство "Формат" поля IP-адреса для &&&&&&&&&&&&.

Что делает маска ввода? Когда вы начинаете вводить текст в поле адреса, маска ввода предотвращает ввод символов, кроме чисел и пробелов между тремя точками. Если цифровая часть является двузначным номером, оставьте третью цифру пустой или введите пробел. Обратите внимание, что эта маска ввода не предупредит пользователя, если он пропускает ввод одной или несколько частей адреса или вводит вместо числа только пробелы. Например, "345. .3. " будет принято как допустимый адрес.

Как работает формат отображения? Когда вы закончите вводить текст и покинуть поле, формат отображения удаляет пробелы в адресе и отображает только числа и цы. Если вы введите "354.35.2.12", адрес будет отображаться как "354.35.2.12". Обратите внимание: если щелкнуть в адресе или нажать F2 (чтобы зайти в режим правки) при выборе адреса, пробелы снова помест будут отображированы.

Совет: Если вы хотите скопировать адрес, перейдите в предыдущий столбец или к предыдущему столбец или к центру управления, нажмите tab, чтобы выбрать отформатированный адрес, а затем нажмите кнопку "Копировать". При этом строка адреса с пробелами не копируется.

Сортировка записей в форме или отчете по IP-адресам

Если нужно создать форму или отчет, в которых записи сортироваться по IP-адресам, создайте новый объект на основе запроса, который сортирует адреса по описанным выше, а не по таблице, в которой хранится адрес.

К началу страницы

Нужна дополнительная помощь?

Совершенствование навыков работы с Office
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

×