Este tópico descreve o procedimento para classificar endereços IP (Protocolo de Internet) armazenados em um banco de dados Access.
Introdução
Se você trabalha com endereços IP, provavelmente já sabe que não é tão simples quanto trabalhar com texto ou números. Isso ocorre porque um endereço IP é realmente uma coleção de quatro valores numéricos separados por um período (.), em que cada valor é um número entre 0 e 255. A tabela a seguir mostra dados antes de qualquer ordem de classificação ser aplicada.
MachineID |
verificado |
Localização |
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 |
Classificar endereços IP no Access é um desafio porque o Access não fornece um tipo de dados especial para armazenar endereços IP. Embora um endereço IP seja apenas uma coleção de números, você não pode armazenar um endereço IP em um campo numérico. Isso ocorre porque um campo numérico dá suporte apenas a um único ponto decimal (.), enquanto um endereço IP contém três períodos (.). Isso significa que você deve armazenar os endereços em um campo de texto.
Como você armazena endereços IP em um campo de texto, não é possível usar os botões de classificação internos no Access para classificar os endereços de forma significativa. Os botões de classificação sempre classificam valores em um campo de texto em ordem alfabética, mesmo que os caracteres sejam números. Em outras palavras, os endereços são classificados pelo primeiro dígito, depois pelo segundo dígito e assim por diante, em vez dos valores numéricos que compõem o endereço. A tabela a seguir mostra os endereços da tabela anterior classificada em ordem alfabética no campo 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 |
Os endereços que começam com 1 são exibidos antes dos endereços que começam com 2 e assim por diante. A tabela a seguir mostra os endereços na ordem crescente correta .
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 |
Para facilitar a compreensão das etapas envolvidas na classificação desses endereços, você quebra os endereços IP em quatro partes numéricas. Os endereços devem ser classificados pela primeira parte e, em seguida, para cada valor na primeira parte, depois pela segunda parte e assim por diante. A tabela mostra cada parte em uma coluna diferente e, como as colunas contêm valores numéricos simples, torna-se possível classificar as colunas da esquerda para a direita em ordem crescente, conforme mostrado na tabela a seguir.
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 |
Classificar as quatro partes separadamente é o truque por trás da classificação de endereços IP. No procedimento a seguir, você cria uma consulta que, além do campo endereço IP, inclui quatro colunas calculadas em que cada coluna armazena uma parte dos valores de endereço. A primeira coluna calculada conterá a primeira parte numérica do endereço, a segunda coluna calculada manterá a segunda parte numérica do endereço e assim por diante. Em vez de classificar os registros pelo campo IPAddress, a consulta classificará os registros pelas quatro colunas calculadas.
Criar a consulta
Você criará uma consulta selecionada chamada IPAddresses classificados que exibe os registros em ordem crescente de endereços IP. Suponha que o banco de dados atual tenha uma tabela chamada MachineDetails que inclui um campo de texto chamado IPAddress.
-
Clique em Criar > Design de Consulta.
-
Selecione Adicionar Tabelas (Mostrar Tabela no Acesso) e arraste Detalhes do Computador para a seção superior do Modo de Exibição de Design.
-
Arraste os campos MachineID e IPAddress para a grade de design de consulta.
-
Agora você está pronto para adicionar as colunas calculadas. Na primeira coluna em branco à direita, digite a expressão PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".") -1))) na linha Campo . A expressão retorna os caracteres anteriores ao primeiro período (.) no campo IPAddress.
Agora, examine a expressão. Como você não sabe quantos dígitos compõem a primeira parte do endereço, você usa a função InStr para encontrar a posição do primeiro período. A subtração 1 (para excluir o período) retorna o número de dígitos na primeira parte. Em seguida, você usa esse número com a função Esquerda para extrair tantos caracteres, partindo do caractere mais à esquerda, do campo IPAddress. Por fim, você chama a função Val para converter os caracteres retornados pela função Esquerda em um número. Essa última etapa é necessária porque o tipo de dados subjacente é Texto.
-
Salve a consulta clicando em Salvar na Barra de Ferramentas de Acesso Rápido. É uma boa ideia fazer isso após cada etapa intermediária.
-
Adicione a coluna para a segunda parte do endereço. Na coluna à direita de PartI, digite PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".") +1,InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -InStr(1,[IPAddress],".") -1)) na linha Campo . A expressão retorna os caracteres localizados entre o primeiro e o segundo períodos no campo IPAddress.
Novamente, examine a expressão. Como você não sabe quantos dígitos compõem a segunda parte do endereço ou exatamente onde a segunda parte é iniciada (porque você não tem quanto tempo a primeira parte é), você usa a função InStr para encontrar as posições dos períodos. Em seguida, você usa a função Mid para extrair os caracteres que seguem o primeiro período, mas precedem o segundo período. Por fim, você chama a função Val para converter os caracteres retornados pela função Mid em um número. Essa última etapa é necessária porque o tipo de dados subjacente é Texto.
-
Adicione a coluna para a terceira parte do endereço. Na coluna à direita de PartII, digite 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)) na linha Campo . A expressão retorna os caracteres localizados entre o segundo e o terceiro períodos no campo IPAddress.
Novamente, examine a expressão. Como você não sabe quantos dígitos compõem a terceira parte do endereço ou exatamente onde a terceira parte é iniciada (porque você não sabe quanto tempo a primeira e segunda partes são), você usa a função InStr para encontrar as posições dos períodos. Em seguida, você usa a função Mid para extrair os caracteres que seguem o segundo período, mas precedem o terceiro período. Por fim, você chama a função Val para converter os caracteres retornados pela função Mid em um número. Essa última etapa é necessária porque o tipo de dados subjacente é Texto.
-
Adicione a coluna para a quarta e última parte do endereço. Na coluna à direita de PartIII, digite PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],"."))) na linha Campo . A expressão retorna os caracteres que seguem o último período.
Novamente, examine a expressão. A chave é localizar o local do terceiro período e, em seguida, extrair todos os caracteres que o seguem. Como você não sabe exatamente onde o terceiro período está localizado, você chama a função InStr três vezes para encontrar a posição do terceiro período. Em seguida, você usa a função Len para calcular o número de dígitos na quarta parte. O número de dígitos retornados é então usado com a função Right para extrair muitos caracteres da parte direita do campo IPAddress. Por fim, você chama a função Val para converter os caracteres retornados pela função Mid em um número. Essa última etapa é necessária porque o tipo de dados subjacente é Texto.
-
Defina a linha Classificar de todas as quatro colunas calculadas como Crescente.
Importante A linha Classificar da coluna IPAddress deve ficar em branco.
Se você quiser classificar por outros valores de campo, além dos endereços, coloque os campos à esquerda ou à direita de todas as quatro colunas calculadas. Não coloque os outros campos de classificação entre as colunas calculadas.
-
A próxima etapa é ocultar as quatro colunas calculadas da planilha de dados. Mas antes de fazer isso, alterne para a exibição Datasheet para ver o resultado das expressões nas colunas calculadas. A tabela a seguir mostra as colunas que você verá na exibição Datasheet.
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
-
Volte para a exibição Design e desmarque a caixa de seleção na linha Mostrar de todas as quatro colunas calculadas. Isso impede que as colunas calculadas sejam exibidas no modo de exibição Datasheet.
-
Opcionalmente, especifique critérios para excluir registros da consulta.
-
Alterne para a exibição Datasheet para ver os registros em ordem classificada. Você verá os registros classificados corretamente na ordem crescente dos endereços IP.
Mais usos para endereços IP classificados
Validar endereços IP durante a entrada de dados
Se você quiser validar endereços sem escrever código, poderá fazê-lo em uma extensão limitada definindo a propriedade InputMask do campo como ###.#######; 0;" " e a propriedade Format do campo endereço IP para &&&&&&&&&&&&.
O que a máscara de entrada faz? Quando você começa a digitar no campo de endereço, a máscara de entrada impede que você insira caracteres diferentes de números e espaços entre os três períodos. Se uma parte numérica for um número de dois dígitos, deixe o terceiro dígito em branco ou digite um espaço. Observe que essa máscara de entrada não avisará o usuário se ele ignorar digitar uma ou mais partes do endereço ou digitar apenas espaços em vez de um valor numérico. Por exemplo, "345. .3. " seria aceite como um endereço válido.
O que faz o formato de apresentação? Quando terminar de escrever e sair do campo, o formato de apresentação remove os espaços no endereço e apresenta apenas os números e períodos. Assim, se tiver escrito "354.35 .2 .12", o endereço será apresentado como "354.35.2.12". Tenha em atenção que se clicar no endereço ou premir F2 (para entrar no modo de edição) quando o endereço estiver selecionado, os espaços voltarão a aparecer.
Dica: Se quiser copiar um endereço, aceda à coluna ou controlo anterior, prima a Tecla de Tabulação para selecionar o endereço formatado e, em seguida, clique em Copiar. Ao fazê-lo, não copiará a cadeia de endereços que contém espaços.
Ordenar registos num formulário ou relatório por endereços IP
Se precisar de criar um formulário ou um relatório no qual os registos são ordenados por endereços IP, basee o novo objeto numa consulta que ordena os endereços conforme descrito anteriormente, em vez de na tabela que armazena os endereços.