이 항목에서는 Access 데이터베이스에 저장된 IP(인터넷 프로토콜) 주소를 정렬하는 절차를 설명합니다.
소개
IP 주소를 사용하는 경우 텍스트 또는 숫자 작업만큼 간단하지 않다는 것을 이미 알고 있는 것입니다. IP 주소는 실제로 각 값이 0에서 255 사이의 숫자인 마침표(.)로 구분된 4개의 숫자 값 컬렉션이기 때문입니다. 다음 표에는 정렬 순서가 적용되기 전의 데이터가 표시됩니다.
MachineID |
Employee |
위치 |
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 |
Access에서 IP 주소를 정렬하는 것은 액세스에서 IP 주소를 저장하기 위한 특별한 데이터 형식을 제공하지 않기 때문에 어려운 일입니다. 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 주소를 네 개의 숫자 부분으로 나누면 됩니다. 주소는 첫 번째 부분, 첫 번째 부분의 각 값, 두 번째 부분 등에 따라 정렬되어야 합니다. 표는 서로 다른 열의 각 부분을 표시하며, 열에 단순 숫자 값이 있으므로 다음 표와 같이 열을 왼쪽에서 오른쪽으로 오름차순으로 정렬할 수 있습니다.
이상적 |
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 주소 필드 외에도 각 열이 주소 값의 일부를 저장하는 4개의 계산 열을 포함하는 쿼리를 만듭니다. 첫 번째 계산 열은 주소의 첫 번째 숫자 부분을, 두 번째 계산 열은 주소의 두 번째 숫자 부분을 보유합니다. 쿼리는 IPAddress 필드를 기준으로 레코드를 정렬하는 대신 4개의 계산 열을 기준으로 레코드를 정렬합니다.
쿼리 만들기
레코드를 IP 주소의 오름차순으로 표시하는 정렬된 IPAddresses라는 선택 쿼리를 만듭니다. 현재 데이터베이스에 IPAddress라는 텍스트 필드가 포함된 MachineDetails라는 테이블이 있다고 가정합니다.
-
만들기 > 쿼리 디자인을 클릭합니다.
-
테이블 추가(액세스에 테이블 표시)를 선택하고 컴퓨터 세부 정보를 디자인 뷰의 위쪽 섹션으로 끌어옵니다.
-
MachineID 및 IPAddress 필드를 쿼리 디자인 그리드로 끕니다.
-
이제 계산 열을 추가할 준비가 되었습니다. 오른쪽의 첫 번째 빈 열에 PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],"") 식을 입력합니다. -1)))필드 행에 있습니다. 식은 첫 번째 마침표(.) 앞에 오는 문자를 반환합니다. IPAddress 필드에 있습니다.
이제 식을 검토합니다. 주소의 첫 번째 부분을 구성하는 숫자 수를 모르기 때문에 InStr 함수를 사용하여 첫 번째 마침표의 위치를 찾습니다. 마침표 제외를 위해 1을 빼면 첫 번째 부분의 숫자 수가 반환됩니다. 그런 다음 Left 함수와 함께 이 숫자를 사용하여 IPAddress 필드에서 가장 왼쪽 문자부터 시작하는 많은 문자를 추출합니다. 마지막으로 Val 함수를 호출하여 Left 함수에서 반환한 문자를 숫자로 변환합니다. 이 마지막 단계는 기본 데이터 형식이 Text이기 때문에 필요합니다.
-
빠른 실행 도구 모음에서 저장을 클릭하여 쿼리를 저장합니다. 각 중간 단계 후에 이 작업을 수행하는 것이 좋습니다.
-
두 번째 주소 부분에 대한 열을 추가합니다. PartI 오른쪽에 있는 열에 PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],"")을 입력합니다. +1,InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -InStr(1,[IPAddress],".") -1))필드 행에 있습니다. 식은 IPAddress 필드의 첫 번째와 두 번째 마침표 사이에 있는 문자를 반환합니다.
다시 식을 검토합니다. 주소의 두 번째 부분을 구성하는 자릿수 또는 두 번째 부분이 시작되는 위치(첫 번째 부분의 길이는 아님)를 모르기 때문에 InStr 함수를 사용하여 마침표의 위치를 찾습니다. 그런 다음 Mid 함수를 사용하여 첫 번째 마침표 뒤에 있지만 두 번째 마침표 앞에 오는 문자를 추출합니다. 마지막으로 Val 함수를 호출하여 Mid 함수에서 반환한 문자를 숫자로 변환합니다. 이 마지막 단계는 기본 데이터 형식이 Text이기 때문에 필요합니다.
-
세 번째 주소 부분에 대한 열을 추가합니다. 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 함수에서 반환한 문자를 숫자로 변환합니다. 이 마지막 단계는 기본 데이터 형식이 Text이기 때문에 필요합니다.
-
네 번째 및 마지막 주소 부분에 대한 열을 추가합니다. PartIII의 오른쪽 열에 PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(InStr(1,[IPAddress],",")을 입력합니다. +1,[IPAddress],".") +1,[IPAddress],"."))) 필드 행에 있습니다 . 식은 마지막 마침표 뒤에 있는 문자를 반환합니다.
다시 식을 검토합니다. 핵심은 세 번째 마침표의 위치를 찾은 다음 그 뒤에 있는 모든 문자를 추출하는 것입니다. 세 번째 마침표가 어디에 있는지 정확히 알 수 없으므로 InStr 함수를 세 번 호출하여 세 번째 마침표의 위치를 찾습니다. 그런 다음 Len 함수를 사용하여 네 번째 부분의 숫자 수를 계산합니다. 반환된 숫자 수는 Right 함수와 함께 사용하여 IPAddress 필드의 오른쪽 부분에서 많은 문자를 추출합니다. 마지막으로 Val 함수를 호출하여 Mid 함수에서 반환한 문자를 숫자로 변환합니다. 이 마지막 단계는 기본 데이터 형식이 Text이기 때문에 필요합니다.
-
계산된 열 4개 모두의 정렬 행을 오름차순으로 설정합니다.
중요 IPAddress 열의 정렬 행은 비워 두어야 합니다.
주소 외에 다른 필드 값을 기준으로 정렬하려면 계산된 열 4개 모두의 왼쪽 또는 오른쪽에 필드를 배치합니다. 계산 열 사이에 다른 정렬 필드를 배치하지 마세요.
-
다음 단계는 데이터시트에서 계산된 열 4개를 숨기는 것입니다. 하지만 이렇게 하기 전에 데이터시트 보기로 전환하여 계산 열에 있는 식의 결과를 확인합니다. 다음 표에서는 데이터시트 보기에 표시되는 열을 보여 줍니다.
MachineID
IPAddress
이상적
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
-
디자인 보기로 다시 전환하고 계산된 열 4개 모두의 행 표시 에서 확인란의 선택을 취소합니다. 이렇게 하면 계산된 열이 데이터시트 보기에 표시되지 않습니다.
-
필요에 따라 쿼리에서 레코드를 제외하기 위한 조건을 지정합니다.
-
정렬된 순서로 레코드를 보려면 데이터시트 보기로 전환합니다. 레코드가 IP 주소의 오름차순으로 올바르게 정렬된 것을 볼 수 있습니다.
정렬된 IP 주소에 대한 추가 사용
데이터 입력 중 IP 주소 유효성 검사
코드를 작성하지 않고 주소의 유효성을 검사하려는 경우 필드의 InputMask 속성을 ###.#으로 설정하여 제한된 범위로 설정할 수 있습니다. 0;" " 및 ip 주소 필드의 Format 속성을 &&&&&&&&&&&&.
입력 마스크는 무엇을 합니까? 주소 필드에 입력을 시작하면 입력 마스크를 사용하면 세 기간 사이에 숫자와 공백 이외의 문자를 입력할 수 없습니다. 숫자 부분이 두 자리 숫자인 경우 세 번째 숫자를 비워 두거나 공백을 입력합니다. 이 입력 마스크는 주소의 하나 이상의 부분 입력을 건너뛰거나 숫자 값 대신 공백만 입력하는 경우 사용자에게 경고하지 않습니다. 예: "345. .3. "은 유효한 주소로 허용됩니다.
표시 형식은 무엇을 합니까? 입력을 완료하고 필드를 나가면 표시 형식이 주소의 공백을 제거하고 숫자와 마침표만 표시합니다. 따라서 "354.35 .2 .12"를 입력하면 주소가 "354.35.2.12"로 표시됩니다. 주소 내부를 클릭하거나 주소가 선택되면 F2 키를 눌러 편집 모드로 전환하면 공백이 다시 나타납니다.
팁: 주소를 복사하려면 이전 열 또는 컨트롤로 이동하고 TAB 키를 눌러 서식이 지정된 주소를 선택한 다음 복사를 클릭합니다. 이렇게 하면 공백이 포함된 주소 문자열을 복사하지 않습니다.
IP 주소별로 폼 또는 보고서의 레코드 정렬
레코드가 IP 주소별로 정렬되는 폼이나 보고서를 만들어야 하는 경우 주소를 저장하는 테이블 대신 이전에 설명한 대로 주소를 정렬하는 쿼리에 새 개체를 기반으로 합니다.