Cette rubrique décrit la procédure de tri des adresses IP (Internet Protocol) stockées dans une base de données Access.
Introduction
Si vous utilisez des adresses IP, vous savez probablement déjà qu’il n’est pas aussi simple que d’utiliser du texte ou des chiffres. En effet, une adresse IP est en fait une collection de quatre valeurs numériques séparées par un point (.), où chaque valeur est un nombre compris entre 0 et 255. Le tableau suivant affiche les données avant l’application d’un ordre de tri.
MachineID |
Contoso |
Emplacement |
ADRESSE 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 |
Le tri des adresses IP dans Access est un défi, car Access ne fournit pas de type de données spécial pour le stockage des adresses IP. Bien qu’une adresse IP soit simplement une collection de nombres, vous ne pouvez pas stocker d’adresses IP dans un champ numérique. Cela est dû au fait qu’un champ numérique ne prend en charge qu’une seule virgule décimale (.), alors qu’une adresse IP contient trois points (.). Cela signifie que vous devez stocker les adresses dans un champ de texte.
Étant donné que vous stockez des adresses IP dans un champ de texte, vous ne pouvez pas utiliser les boutons de tri intégrés dans Access pour trier les adresses de manière significative. Les boutons de tri trient toujours les valeurs d’un champ de texte par ordre alphabétique, même si les caractères sont des nombres. En d’autres termes, les adresses sont triées par le premier chiffre, puis par le deuxième chiffre, et ainsi de suite, au lieu des valeurs numériques qui composent l’adresse. Le tableau suivant présente les adresses de la table précédente triées par ordre alphabétique dans le champ ADRESSE IP.
MachineID |
ADRESSE 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 |
Les adresses qui commencent par 1 sont affichées avant les adresses qui commencent par 2, et ainsi de suite. Le tableau suivant présente les adresses dans l’ordre croissant correct .
MachineID |
ADRESSE 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 |
Pour faciliter la compréhension des étapes impliquées dans le tri de ces adresses, vous divisez les adresses IP en quatre parties numériques. Les adresses doivent être triées par la première partie, puis pour chaque valeur de la première partie, puis par la deuxième partie, et ainsi de suite. Le tableau affiche chaque partie dans une colonne différente et, comme les colonnes contiennent des valeurs numériques simples, il devient possible de trier les colonnes de gauche à droite dans l’ordre croissant, comme indiqué dans le tableau suivant.
PartI |
PartII |
PartII |
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 |
Le tri des quatre parties séparément est l’astuce qui sous-tend le tri des adresses IP. Dans la procédure qui suit, vous créez une requête qui, en plus du champ Adresse IP, inclut quatre colonnes calculées où chaque colonne stocke une partie des valeurs d’adresse. La première colonne calculée contiendra la première partie numérique de l’adresse, la deuxième colonne calculée contiendra la deuxième partie numérique de l’adresse, et ainsi de suite. Au lieu de trier les enregistrements en fonction du champ IPAddress, la requête trie les enregistrements selon les quatre colonnes calculées.
Créer la requête
Vous allez créer une requête select nommée Adresses IP triées qui affiche les enregistrements dans l’ordre croissant des adresses IP. Supposons que la base de données active possède une table nommée MachineDetails qui inclut un champ de texte nommé IPAddress.
-
Cliquez sur Créer > conception de requête.
-
Sélectionnez Ajouter des tables (Afficher la table dans Access) et faites glisser Détails de l’ordinateur vers la section supérieure du mode Création.
-
Faites glisser les champs MachineID et IPAddress vers la grille de conception de requête.
-
Vous êtes maintenant prêt à ajouter les colonnes calculées. Dans la première colonne vide à droite, tapez l’expression PartI : Val(Left([IPAddress],(InStr(1,[IPAddress], ». ») -1))) dans la ligne Champ . L’expression retourne les caractères précédant le premier point (.) dans le champ ADRESSE IP.
À présent, passez en revue l’expression . Étant donné que vous ne savez pas combien de chiffres composent la première partie de l’adresse, vous utilisez la fonction InStr pour rechercher la position du premier point. La soustraction de 1 (pour exclure le point) retourne le nombre de chiffres dans la première partie. Vous utilisez ensuite ce nombre avec la fonction Left pour extraire ce nombre de caractères, en commençant par le caractère le plus à gauche, du champ IPAddress. Enfin, vous appelez la fonction Val pour convertir les caractères retournés par la fonction Left en nombre. Cette dernière étape est nécessaire, car le type de données sous-jacent est Text.
-
Enregistrez la requête en cliquant sur Enregistrer dans la barre d’outils Accès rapide. Il est judicieux de le faire après chaque étape intermédiaire.
-
Ajoutez la colonne pour la deuxième partie d’adresse. Dans la colonne à droite de PartI, tapez PartII : Val(Mid([IPAddress],InStr(1,[IPAddress], ». ») +1,InStr(InStr(1,[ADRESSE IP], ». ») +1,[ADRESSE IP], ». ») -InStr(1,[ADRESSE IP], ». ») -1)) dans la ligne Champ . L’expression retourne les caractères situés entre la première et la deuxième période dans le champ IPAddress.
Là encore, passez en revue l’expression . Étant donné que vous ne savez pas combien de chiffres composent la deuxième partie de l’adresse ou exactement où commence la deuxième partie (car vous ne connaissez pas la durée de la première partie), vous utilisez la fonction InStr pour rechercher les positions des points. Vous utilisez ensuite la fonction Mid pour extraire les caractères qui suivent la première période, mais qui précèdent la deuxième période. Enfin, vous appelez la fonction Val pour convertir les caractères retournés par la fonction Mid en nombre. Cette dernière étape est nécessaire, car le type de données sous-jacent est Text.
-
Ajoutez la colonne pour la troisième partie d’adresse. Dans la colonne à droite de PartII, tapez PartII : Val(Mid([IPAddress],InStr(InStr(1,[IPAddress], ». ») +1,[ADRESSE IP], ». ») +1,InStr(InStr(InStr(1,[IPAddress], ». ») +1,[ADRESSE IP], ». ») +1,[ADRESSE IP], ». ») -InStr(InStr(1,[ADRESSE IP], ». ») +1,[ADRESSE IP], ». ») -1)) dans la ligne Champ . L’expression retourne les caractères situés entre les deuxième et troisième points dans le champ IPAddress.
Là encore, passez en revue l’expression . Étant donné que vous ne savez pas combien de chiffres composent la troisième partie de l’adresse ou exactement où commence la troisième partie (parce que vous ne savez pas combien de temps sont les première et deuxième parties), vous utilisez la fonction InStr pour rechercher les positions des points. Vous utilisez ensuite la fonction Mid pour extraire les caractères qui suivent la deuxième période, mais qui précèdent la troisième période. Enfin, vous appelez la fonction Val pour convertir les caractères retournés par la fonction Mid en nombre. Cette dernière étape est nécessaire, car le type de données sous-jacent est Text.
-
Ajoutez la colonne pour la quatrième et dernière partie d’adresse. Dans la colonne à droite de PartII, tapez PartIV : Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(InStr(1,[IPAddress], ». ») +1,[ADRESSE IP], ». ») +1,[ADRESSE IP], ». »))) dans la ligne Champ . L’expression retourne les caractères qui suivent le dernier point.
Là encore, passez en revue l’expression . La clé consiste à trouver l’emplacement du troisième point, puis à extraire tous les caractères qui le suivent. Comme vous ne savez pas exactement où se trouve la troisième période, vous appelez la fonction InStr trois fois pour trouver la position de la troisième période. Vous utilisez ensuite la fonction Len pour calculer le nombre de chiffres dans la quatrième partie. Le nombre de chiffres retournés est ensuite utilisé avec la fonction Right pour extraire ce nombre de caractères de la partie droite du champ IPAddress. Enfin, vous appelez la fonction Val pour convertir les caractères retournés par la fonction Mid en nombre. Cette dernière étape est nécessaire, car le type de données sous-jacent est Text.
-
Définissez la ligne Trier des quatre colonnes calculées sur Croissant.
Important La ligne De tri de la colonne IPAddress doit être laissée vide.
Si vous souhaitez trier par d’autres valeurs de champ, en plus des adresses, placez les champs à gauche ou à droite des quatre colonnes calculées. Ne placez pas les autres champs de tri entre les colonnes calculées.
-
L’étape suivante consiste à masquer les quatre colonnes calculées de la feuille de données. Mais avant cela, basculez en mode Feuille de données pour voir le résultat des expressions dans les colonnes calculées. Le tableau suivant présente les colonnes que vous verrez en mode Feuille de données.
MachineID
ADRESSE IP
PartI
PartII
PartII
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
-
Revenez en mode Création et désactivez la case à cocher dans la ligne Afficher les quatre colonnes calculées. Cela empêche l’affichage des colonnes calculées en mode Feuille de données.
-
Si vous le souhaitez, spécifiez les critères d’exclusion des enregistrements de la requête.
-
Basculez en mode Feuille de données pour afficher les enregistrements dans l’ordre trié. Vous verrez les enregistrements correctement triés dans l’ordre croissant des adresses IP.
Autres utilisations pour les adresses IP triées
Valider les adresses IP lors de l’entrée de données
Si vous souhaitez valider des adresses sans écrire de code, vous pouvez le faire dans une mesure limitée en définissant la propriété InputMask du champ sur ###.##.##.#.##.### 0;" » et la propriété Format du champ d’adresse IP pour &&&&&&&&&&&&.
Que fait le masque d’entrée ? Lorsque vous commencez à taper dans le champ d’adresse, le masque de saisie vous empêche d’entrer des caractères autres que des nombres et des espaces entre les trois points. Si une partie numérique est un nombre à deux chiffres, laissez le troisième chiffre vide ou tapez un espace à la place. Notez que ce masque d’entrée n’avertit pas l’utilisateur s’il ignore la saisie d’une ou plusieurs parties de l’adresse, ou ne tape que des espaces au lieu d’une valeur numérique. Par exemple, « 345. .3. » serait accepté comme adresse valide.
Que fait le format d’affichage ? Lorsque vous avez fini de taper et de quitter le champ, le format d’affichage supprime les espaces dans l’adresse et affiche uniquement les nombres et les points. Par conséquent, si vous avez tapé « 354.35.2 .12 », l’adresse s’affiche sous la forme « 354.35.2.12 ». Notez que si vous cliquez à l’intérieur de l’adresse ou appuyez sur F2 (pour passer en mode édition) lorsque l’adresse est sélectionnée, les espaces réapparaissent.
Conseil : Si vous souhaitez copier une adresse, accédez à la colonne ou au contrôle précédent, appuyez sur TAB pour sélectionner l’adresse mise en forme, puis cliquez sur Copier. En procédant ainsi, vous ne copierez pas la chaîne d’adresse qui contient des espaces.
Trier les enregistrements d’un formulaire ou d’un état par adresses IP
Si vous devez créer un formulaire ou un état dans lequel les enregistrements sont triés par adresses IP, basez le nouvel objet sur une requête qui trie les adresses comme décrit précédemment, plutôt que sur la table qui stocke les adresses.