Αυτό το θέμα περιγράφει τη διαδικασία ταξινόμησης διευθύνσεων πρωτοκόλλου Internet (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 περιέχει τρεις τελείες (.). Αυτό σημαίνει ότι πρέπει να αποθηκεύσετε τις διευθύνσεις σε ένα πεδίο κειμένου.
Επειδή αποθηκεύετε διευθύνσεις 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, περιλαμβάνει τέσσερις υπολογιζόμενες στήλες όπου κάθε στήλη αποθηκεύει ένα τμήμα των τιμών διεύθυνσης. Η πρώτη υπολογιζόμενη στήλη θα περιέχει το πρώτο αριθμητικό τμήμα της διεύθυνσης, η δεύτερη υπολογιζόμενη στήλη θα περιέχει το δεύτερο αριθμητικό τμήμα της διεύθυνσης κ.ο.κ. Αντί να ταξινομήσετε τις εγγραφές κατά το πεδίο IPAddress, το ερώτημα θα ταξινομεί τις εγγραφές με βάση τις τέσσερις υπολογιζόμενες στήλες.
Δημιουργία του ερωτήματος
Θα δημιουργήσετε ένα ερώτημα επιλογής με το όνομα Ταξινομημένα IPAddresses που εμφανίζει τις εγγραφές σε αύξουσα σειρά διευθύνσεων IP. Ας υποθέσουμε ότι η τρέχουσα βάση δεδομένων έχει έναν πίνακα με το όνομα MachineDetails, ο οποίος περιλαμβάνει ένα πεδίο κειμένου με το όνομα IPAddress.
-
Κάντε κλικ στην επιλογή Δημιουργία > σχεδίαση ερωτήματος.
-
Επιλέξτε Προσθήκη πινάκων (Εμφάνιση πίνακα στην Access) και σύρετε τις Λεπτομέρειες υπολογιστή στο επάνω τμήμα της Προβολής σχεδίασης.
-
Σύρετε τα πεδία MachineID και IPAddress στο πλέγμα σχεδίασης ερωτήματος.
-
Τώρα είστε έτοιμοι να προσθέσετε τις υπολογιζόμενες στήλες. Στην πρώτη κενή στήλη στα δεξιά, πληκτρολογήστε την παράσταση PartI: Val(Left([IPAddress],(InStr(1;[IPAddress],".") -1))) στη γραμμή Πεδίο . Η παράσταση επιστρέφει τους χαρακτήρες που προηγούνται της πρώτης περιόδου (.) στο πεδίο IPAddress.
Τώρα, εξετάστε την παράσταση. Επειδή δεν γνωρίζετε πόσα ψηφία αποτελούν το πρώτο τμήμα της διεύθυνσης, χρησιμοποιείτε τη συνάρτηση InStr για να βρείτε τη θέση της πρώτης περιόδου. Η αφαίρεση του 1 (για να εξαιρεθεί η περίοδος) επιστρέφει τον αριθμό των ψηφίων στο πρώτο τμήμα. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε αυτόν τον αριθμό με τη συνάρτηση Left για να εξαγάγετε τόσους πολλούς χαρακτήρες, ξεκινώντας από τον πιο αριστερό χαρακτήρα, από το πεδίο IPAddress. Τέλος, καλείτε τη συνάρτηση Val για να μετατρέψετε τους χαρακτήρες που επιστρέφονται από τη συνάρτηση Left σε αριθμό. Αυτό το τελευταίο βήμα είναι απαραίτητο, επειδή ο υποκείμενος τύπος δεδομένων είναι Κείμενο.
-
Αποθηκεύστε το ερώτημα κάνοντας κλικ στην επιλογή Αποθήκευση στη Γραμμή εργαλείων γρήγορης πρόσβασης. Είναι καλή ιδέα να το κάνετε αυτό μετά από κάθε ενδιάμεσο βήμα.
-
Προσθέστε τη στήλη για το δεύτερο τμήμα διεύθυνσης. Στη στήλη στα δεξιά του τμήματος, πληκτρολογήστε PartII: Val(Mid([IPAddress],InStr(1;[IPAddress],".") +1;InStr(InStr(1;[IPAddress];".") +1;[IPAddress];".") -InStr(1;[IPAddress];".") -1)) στη γραμμή Πεδίο . Η παράσταση επιστρέφει τους χαρακτήρες που βρίσκονται μεταξύ της πρώτης και της δεύτερης περιόδου στο πεδίο IPAddress.
Ελέγξτε ξανά την παράσταση. Επειδή δεν γνωρίζετε πόσα ψηφία αποτελούν το δεύτερο τμήμα της διεύθυνσης ή ακριβώς πού ξεκινά το δεύτερο τμήμα (επειδή δεν γνωρίζετε πόσο μεγάλο είναι το πρώτο τμήμα), χρησιμοποιείτε τη συνάρτηση InStr για να βρείτε τις θέσεις των περιόδων. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε τη συνάρτηση Mid για να εξαγάγετε τους χαρακτήρες που ακολουθούν την πρώτη περίοδο, αλλά προηγούνται της δεύτερης περιόδου. Τέλος, καλείτε τη συνάρτηση Val για να μετατρέψετε τους χαρακτήρες που επιστρέφονται από τη συνάρτηση Mid σε αριθμό. Αυτό το τελευταίο βήμα είναι απαραίτητο, επειδή ο υποκείμενος τύπος δεδομένων είναι Κείμενο.
-
Προσθέστε τη στήλη για το τρίτο τμήμα διεύθυνσης. Στη στήλη στα δεξιά του 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 σε αριθμό. Αυτό το τελευταίο βήμα είναι απαραίτητο, επειδή ο υποκείμενος τύπος δεδομένων είναι Κείμενο.
-
Προσθέστε τη στήλη για το τέταρτο και τελευταίο τμήμα διεύθυνσης. Στη στήλη στα δεξιά του PartIII, πληκτρολογήστε PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1;[IPAddress],".") +1;[IPAddress];".") +1;[IPAddress];".")) στη γραμμή Πεδίο . Η παράσταση επιστρέφει τους χαρακτήρες που ακολουθούν την τελευταία περίοδο.
Ελέγξτε ξανά την παράσταση. Το κλειδί είναι να βρείτε τη θέση της τρίτης περιόδου και, στη συνέχεια, να εξαγάγετε όλους τους χαρακτήρες που ακολουθούν. Επειδή δεν γνωρίζετε ακριβώς πού βρίσκεται η τρίτη περίοδος, καλείτε τη συνάρτηση InStr τρεις φορές για να βρείτε τη θέση της τρίτης περιόδου. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε τη συνάρτηση Len για να υπολογίσετε τον αριθμό των ψηφίων στο τέταρτο τμήμα. Ο αριθμός των ψηφίων που επιστρέφονται χρησιμοποιείται στη συνέχεια με τη συνάρτηση Right για την εξαγωγή πολλών χαρακτήρων από το δεξιό τμήμα του πεδίου IPAddress. Τέλος, καλείτε τη συνάρτηση Val για να μετατρέψετε τους χαρακτήρες που επιστρέφονται από τη συνάρτηση Mid σε αριθμό. Αυτό το τελευταίο βήμα είναι απαραίτητο, επειδή ο υποκείμενος τύπος δεδομένων είναι Κείμενο.
-
Ορίστε τη γραμμή Ταξινόμηση και των τεσσάρων υπολογιζόμενων στηλών σε Αύξουσα.
Σημαντικό Η γραμμή Ταξινόμηση της στήλης IPAddress πρέπει να είναι κενή.
Εάν θέλετε να ταξινομήσετε κατά άλλες τιμές πεδίων, εκτός από τις διευθύνσεις, τοποθετήστε τα πεδία είτε προς τα αριστερά είτε προς τα δεξιά και των τεσσάρων υπολογιζόμενων στηλών. Μην τοποθετείτε τα άλλα πεδία ταξινόμησης μεταξύ των υπολογιζόμενων στηλών.
-
Το επόμενο βήμα είναι να αποκρύψετε τις τέσσερις υπολογιζόμενες στήλες από το φύλλο δεδομένων. Ωστόσο, προτού το κάνετε αυτό, μεταβείτε σε προβολή φύλλου δεδομένων για να δείτε το αποτέλεσμα των παραστάσεων στις υπολογιζόμενες στήλες. Ο παρακάτω πίνακας εμφανίζει τις στήλες που θα δείτε στην προβολή φύλλου δεδομένων.
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
-
Επιστρέψτε στην προβολή σχεδίασης και καταργήστε την επιλογή του πλαισίου ελέγχου στη γραμμή Εμφάνιση και των τεσσάρων υπολογιζόμενων στηλών. Αυτό αποτρέπει την εμφάνιση των υπολογιζόμενων στηλών σε προβολή φύλλου δεδομένων.
-
Προαιρετικά, καθορίστε κριτήρια για την εξαίρεση εγγραφών από το ερώτημα.
-
Μεταβείτε σε προβολή φύλλου δεδομένων για να δείτε τις εγγραφές με ταξινομημένη σειρά. Θα δείτε τις εγγραφές να ταξινομούνται σωστά με αύξουσα σειρά των διευθύνσεων IP.
Περισσότερες χρήσεις για ταξινομημένες διευθύνσεις IP
Επικύρωση διευθύνσεων IP κατά την καταχώρηση δεδομένων
Εάν θέλετε να επικυρώσετε διευθύνσεις χωρίς να γράψετε κώδικα, μπορείτε να το κάνετε σε περιορισμένο βαθμό ορίζοντας την ιδιότητα InputMask του πεδίου σε ###.##.###.###; 0;" " και η ιδιότητα Format του πεδίου διεύθυνσης IP για &&&&&&&&&&&&.
Τι κάνει η μάσκα εισαγωγής; Όταν αρχίζετε να πληκτρολογείτε στο πεδίο διεύθυνσης, η μάσκα εισαγωγής δεν επιτρέπει την εισαγωγή χαρακτήρων εκτός από τους αριθμούς και τα διαστήματα μεταξύ των τριών περιόδων. Εάν ένα αριθμητικό τμήμα είναι διψήφιος αριθμός, αφήστε κενό το τρίτο ψηφίο ή πληκτρολογήστε ένα κενό διάστημα. Σημειώστε ότι αυτή η μάσκα εισαγωγής δεν προειδοποιεί το χρήστη εάν παραλείψει να πληκτρολογήσει ένα ή περισσότερα τμήματα της διεύθυνσης ή πληκτρολογεί μόνο κενά διαστήματα αντί για μια αριθμητική τιμή. Για παράδειγμα, "345. .3. " θα γίνει αποδεκτή ως έγκυρη διεύθυνση.
Τι κάνει η μορφή εμφάνισης; Όταν ολοκληρώσετε την πληκτρολόγηση και κλείσετε το πεδίο, η μορφή εμφάνισης καταργεί τα διαστήματα στη διεύθυνση και εμφανίζει μόνο τους αριθμούς και τις τελείες. Επομένως, εάν πληκτρολογήσατε "354.35 .2 .12", η διεύθυνση εμφανίζεται ως "354.35.2.12". Σημειώστε ότι εάν κάνετε κλικ μέσα στη διεύθυνση ή πατήσετε το πλήκτρο F2 (για να εισέλθετε σε λειτουργία επεξεργασίας) όταν επιλεγεί η διεύθυνση, θα εμφανιστούν ξανά τα κενά διαστήματα.
Συμβουλή: Εάν θέλετε να αντιγράψετε μια διεύθυνση, μετακίνηση στην προηγούμενη στήλη ή στοιχείο ελέγχου, πατήστε το πλήκτρο TAB για να επιλέξετε τη μορφοποιημένη διεύθυνση και, στη συνέχεια, κάντε κλικ στην επιλογή Αντιγραφή. Με αυτόν τον τρόπο, δεν θα αντιγράψετε τη συμβολοσειρά διεύθυνσης που περιέχει κενά διαστήματα.
Ταξινόμηση εγγραφών σε μια φόρμα ή αναφορά κατά διευθύνσεις IP
Εάν θέλετε να δημιουργήσετε μια φόρμα ή αναφορά στην οποία οι εγγραφές ταξινομούνται κατά διευθύνσεις IP, το νέο αντικείμενο βασίζεται σε ένα ερώτημα που ταξινομεί διευθύνσεις όπως περιγράφεται προηγουμένως, αντί στον πίνακα που αποθηκεύει τις διευθύνσεις.