Questo argomento descrive la procedura per ordinare gli indirizzi IP (Internet Protocol) archiviati in un database di Access.
Introduzione
Se si usano indirizzi IP, probabilmente si sa già che non è semplice come usare testo o numeri. Questo perché un indirizzo IP è in realtà una raccolta di quattro valori numerici separati da un punto (.), dove ogni valore è un numero compreso tra 0 e 255. La tabella seguente mostra i dati prima dell'applicazione di qualsiasi ordinamento.
ID computer |
Impiegato |
Posizione |
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 |
L'ordinamento degli indirizzi IP in Access rappresenta un problema perché access non fornisce un tipo di dati speciale per l'archiviazione degli indirizzi IP. Anche se un indirizzo IP è solo una raccolta di numeri, non è possibile archiviare gli indirizzi IP in un campo numerico. Il motivo è che un campo numerico supporta una sola virgola decimale (.), mentre un indirizzo IP contiene tre punti (.). Questo significa che è necessario archiviare gli indirizzi in un campo di testo.
Poiché gli indirizzi IP sono archiviati in un campo di testo, non è possibile usare i pulsanti di ordinamento predefiniti di Access per ordinare gli indirizzi in modo significativo. I pulsanti di ordinamento ordinano sempre i valori in un campo di testo in ordine alfabetico, anche se i caratteri sono numeri. In altre parole, gli indirizzi vengono ordinati in base alla prima cifra, quindi alla seconda cifra e così via, invece che in base ai valori numerici che costituiscono l'indirizzo. La tabella seguente mostra gli indirizzi della tabella precedente ordinati in ordine alfabetico nel campo IPAddress.
ID computer |
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 |
Gli indirizzi che iniziano con 1 vengono visualizzati prima degli indirizzi che iniziano con 2 e così via. La tabella seguente mostra gli indirizzi nell'ordine crescente corretto .
ID computer |
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 |
Per semplificare la comprensione dei passaggi necessari per ordinare questi indirizzi, suddividere gli indirizzi IP in quattro parti numeriche. Gli indirizzi devono essere ordinati in base alla prima parte, quindi per ogni valore nella prima parte, poi in base alla seconda parte e così via. La tabella mostra ogni parte in una colonna diversa e, poiché le colonne contengono valori numerici semplici, è possibile ordinare le colonne da sinistra a destra in ordine crescente, come illustrato nella tabella seguente.
Parte I |
ParteII |
ParteII |
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 |
Ordinare le quattro parti separatamente è il trucco dietro l'ordinamento degli indirizzi IP. Nella procedura seguente si crea una query che, oltre al campo Indirizzo IP, include quattro colonne calcolate in cui ogni colonna archivia una parte dei valori di indirizzo. La prima colonna calcolata contiene la prima parte numerica dell'indirizzo, la seconda la seconda parte numerica dell'indirizzo e così via. Invece di ordinare i record in base al campo IPAddress, la query ordina i record in base alle quattro colonne calcolate.
Creare la query
Verrà creata una query di selezione denominata Indirizzi IP ordinati che visualizza i record in ordine crescente di indirizzi IP. Si supponga che il database corrente abbia una tabella denominata MachineDetails che include un campo di testo denominato IPAddress.
-
Fare clic su Crea > Struttura Query.
-
Selezionare Aggiungi tabelle (Mostra tabella in Access) e trascinare Dettagli computer nella sezione superiore della visualizzazione Struttura.
-
Trascinare i campi ID computer e Indirizzo IP nella griglia di struttura della query.
-
È ora possibile aggiungere le colonne calcolate. Nella prima colonna vuota a destra digitare l'espressione PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".") -1))) nella riga Campo . L'espressione restituisce i caratteri che precedono il primo punto (.) nel campo IPAddress.
Rivedere l'espressione. Poiché non si conosce il numero di cifre che costituiscono la prima parte dell'indirizzo, usare la funzione InStr per trovare la posizione del primo punto. La sottrazione di 1 (per escludere il periodo) restituisce il numero di cifre nella prima parte. Usare quindi questo numero con la funzione Left per estrarre tale numero di caratteri, a partire dal carattere all'estrema sinistra, dal campo IPAddress. Infine, chiamare la funzione Val per convertire i caratteri restituiti dalla funzione Left in un numero. Questo ultimo passaggio è necessario perché il tipo di dati sottostante è Testo.
-
Salvare la query facendo clic su Salva sulla barra di accesso rapido. È una buona idea farlo dopo ogni passaggio intermedio.
-
Aggiungere la colonna per la seconda parte dell'indirizzo. Nella colonna a destra di PartI digitare PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".") +1,InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -InStr(1,[IPAddress],".") -1)) nella riga Campo . L'espressione restituisce i caratteri compresi tra il primo e il secondo punto nel campo IPAddress.
Rivedere di nuovo l'espressione. Poiché non si conosce il numero di cifre che costituiscono la seconda parte dell'indirizzo o il punto esatto in cui inizia la seconda parte, perché la prima parte non è lunga, usare la funzione InStr per trovare le posizioni dei punti. Usare quindi la funzione Mid per estrarre i caratteri che seguono il primo periodo, ma precedendo il secondo. Infine, chiamare la funzione Val per convertire i caratteri restituiti dalla funzione Mid in un numero. Questo ultimo passaggio è necessario perché il tipo di dati sottostante è Testo.
-
Aggiungere la colonna per la terza parte dell'indirizzo. Nella colonna a destra di PartII digitare 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)) nella riga Campo . L'espressione restituisce i caratteri compresi tra il secondo e il terzo punto nel campo IPAddress.
Rivedere di nuovo l'espressione. Poiché non si conosce il numero di cifre che costituiscono la terza parte dell'indirizzo o il punto esatto in cui inizia la terza parte, perché non si sa per quanto tempo sono la prima e la seconda parte, usare la funzione InStr per trovare le posizioni dei periodi. Usare quindi la funzione Mid per estrarre i caratteri che seguono il secondo periodo, ma che precedono il terzo punto. Infine, chiamare la funzione Val per convertire i caratteri restituiti dalla funzione Mid in un numero. Questo ultimo passaggio è necessario perché il tipo di dati sottostante è Testo.
-
Aggiungere la colonna per la quarta e la parte dell'indirizzo finale. Nella colonna a destra di PartIII digitare PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],"."))) nella riga Campo . L'espressione restituisce i caratteri che seguono l'ultimo punto.
Rivedere di nuovo l'espressione. La chiave consiste nel trovare la posizione del terzo punto e quindi estrarre tutti i caratteri che la seguono. Poiché non si sa esattamente dove si trova il terzo periodo, chiamare la funzione InStr tre volte per trovare la posizione del terzo periodo. Usare quindi la funzione Lunghezza per calcolare il numero di cifre nella quarta parte. Il numero di cifre restituite viene quindi usato con la funzione Right per estrarre tale numero di caratteri dalla parte destra del campo IPAddress. Infine, chiamare la funzione Val per convertire i caratteri restituiti dalla funzione Mid in un numero. Questo ultimo passaggio è necessario perché il tipo di dati sottostante è Testo.
-
Impostare la riga Ordina di tutte e quattro le colonne calcolate su Crescente.
Importante La riga Ordina della colonna IPAddress deve essere lasciata vuota.
Se si vuole ordinare in base ad altri valori di campo, oltre agli indirizzi, posizionare i campi a sinistra o a destra di tutte e quattro le colonne calcolate. Non inserire gli altri campi di ordinamento tra le colonne calcolate.
-
Il passaggio successivo consiste nel nascondere le quattro colonne calcolate dal foglio dati. Prima di procedere, passare alla visualizzazione Foglio dati per visualizzare il risultato delle espressioni nelle colonne calcolate. La tabella seguente mostra le colonne che verranno visualizzate in visualizzazione Foglio dati.
ID computer
IPAddress
Parte I
ParteII
ParteII
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
-
Tornare in visualizzazione Struttura e deselezionare la casella di controllo nella riga Mostra di tutte e quattro le colonne calcolate. In questo modo si impedisce la visualizzazione delle colonne calcolate in visualizzazione Foglio dati.
-
Facoltativamente, specificare i criteri per l'esclusione di record dalla query.
-
Passare alla visualizzazione Foglio dati per visualizzare i record in ordine ordinato. I record verranno correttamente ordinati in ordine crescente degli indirizzi IP.
Altri usi per indirizzi IP ordinati
Convalidare gli indirizzi IP durante l'immissione dei dati
Se si desidera convalidare gli indirizzi senza scrivere codice, è possibile farlo in misura limitata impostando la proprietà InputMask del campo su ###.###.####.###; 0;" " e la proprietà Format del campo dell'indirizzo IP per &&&&&&&&&&&&.
Che cosa fa la maschera di input? Quando si inizia a digitare nel campo dell'indirizzo, la maschera di input impedisce l'immissione di caratteri diversi da numeri e spazi tra i tre punti. Se una parte numerica è un numero a doppia cifra, lasciare vuota la terza cifra o digitare uno spazio. Si noti che questa maschera di input non avvisa l'utente se ignora la digitazione di una o più parti dell'indirizzo o digita solo spazi anziché un valore numerico. Ad esempio, "345. .3. " verrebbe accettato come indirizzo valido.
Che cosa fa il formato di visualizzazione? Dopo aver digitato e lasciato il campo, il formato di visualizzazione rimuove gli spazi nell'indirizzo e visualizza solo i numeri e i punti. Quindi, se si digita "354.35 .2.12", l'indirizzo viene visualizzato come "354.35.2.12". Si noti che se si fa clic all'interno dell'indirizzo o si preme F2 (per attivare la modalità di modifica) quando l'indirizzo è selezionato, gli spazi verranno nuovamente visualizzati.
Suggerimento: Se si vuole copiare un indirizzo, passare alla colonna o al controllo precedente, premere TAB per selezionare l'indirizzo formattato e quindi fare clic su Copia. In questo modo, la stringa di indirizzo che contiene spazi non verrà copiata.
Ordinare i record in una maschera o in un report in base agli indirizzi IP
Se è necessario creare una maschera o un report in cui i record sono ordinati per indirizzi IP, basare il nuovo oggetto su una query che ordina gli indirizzi come descritto in precedenza, invece che sulla tabella in cui sono archiviati gli indirizzi.