Chủ đề này mô tả quy trình sắp xếp địa chỉ Giao thức Internet (IP) được lưu trữ trong cơ sở dữ liệu Access.
Giới thiệu
Nếu bạn làm việc với địa chỉ IP, có thể bạn đã biết rằng nó không đơn giản như làm việc với văn bản hoặc số. Điều này là vì địa chỉ IP thực sự là một tập hợp gồm bốn giá trị số được phân tách bằng dấu chấm (.), trong đó mỗi giá trị là một số trong khoảng từ 0 đến 255. Bảng sau đây hiển thị dữ liệu trước khi áp dụng bất kỳ thứ tự sắp xếp nào.
| ID Máy | Nhân viên | Vị trí | 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 |
Việc sắp xếp địa chỉ IP trong Access là một thách thức vì Access không cung cấp kiểu dữ liệu đặc biệt để lưu trữ địa chỉ IP. Mặc dù địa chỉ IP chỉ là tập hợp các số, bạn không thể lưu trữ địa chỉ IP vào trường số. Lý do là trường số chỉ hỗ trợ dấu thập phân duy nhất (.), trong khi địa chỉ IP chứa ba dấu chấm (.). Điều này có nghĩa là bạn phải lưu trữ các địa chỉ trong một trường văn bản.
Vì bạn lưu trữ địa chỉ IP vào trường văn bản nên bạn không thể sử dụng các nút sắp xếp tích hợp sẵn trong Access để sắp xếp các địa chỉ một cách có ý nghĩa. Nút sắp xếp luôn sắp xếp các giá trị trong trường văn bản theo thứ tự bảng chữ cái, ngay cả khi các ký tự đó là số. Nói cách khác, các địa chỉ được sắp xếp theo chữ số đầu tiên, sau đó theo chữ số thứ hai và cứ tiếp tục như vậy, thay vì theo các giá trị số tạo thành địa chỉ. Bảng sau đây hiển thị các địa chỉ từ bảng trước đó được sắp xếp theo thứ tự bảng chữ cái trên trường IPAddress.
| ID Máy | 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 |
Các địa chỉ bắt đầu với 1 được hiển thị trước các địa chỉ bắt đầu với 2, v.v. Bảng sau đây hiển thị các địa chỉ theo thứ tự tăng dần.
| ID Máy | 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 |
Để hiểu dễ dàng hơn các bước liên quan đến việc sắp xếp các địa chỉ này, bạn hãy chia địa chỉ IP thành bốn phần số. Địa chỉ phải được sắp xếp theo phần đầu tiên, sau đó cho từng giá trị trong phần đầu tiên, sau đó theo phần thứ hai, v.v. Bảng hiển thị từng phần trong một cột khác nhau và vì các cột chứa các giá trị số đơn giản nên bạn có thể sắp xếp cột từ trái sang phải theo thứ tự tăng dần, như được hiển thị trong bảng sau.
| Phần I | Phần II | Phần III | Phần IV |
|---|---|---|---|
| 1 | 198 | 3 | 93 |
| 32 | 183 | 93 | 40 |
| 104 | 30 | 244 | 2 |
| 104 | 244 | 4 | 1 |
| 104 | 244 | 253 | 29 |
| 123 | 4 | 245 | 23 |
Sắp xếp bốn phần riêng biệt là mẹo đằng sau việc sắp xếp địa chỉ IP. Trong quy trình sau, bạn tạo ra một truy vấn, ngoài trường địa chỉ IP, còn bao gồm bốn cột được tính toán, trong đó mỗi cột lưu trữ một phần giá trị địa chỉ. Cột được tính đầu tiên sẽ chứa phần số đầu tiên của địa chỉ, cột được tính thứ hai sẽ chứa phần số thứ hai của địa chỉ, v.v. Thay vì sắp xếp các bản ghi theo trường IPAddress, truy vấn sẽ sắp xếp các bản ghi theo bốn cột được tính toán.
Tạo truy vấn
Bạn sẽ tạo một truy vấn chọn có tên là IPAddresses đã sắp xếp hiển thị các bản ghi theo thứ tự tăng dần của địa chỉ IP. Giả sử cơ sở dữ liệu hiện tại có một bảng tên là MachineDetails bao gồm một trường văn bản tên là IPAddress.
Bấm Tạo Thiết>kế Truy vấn.
Chọn Thêm Bảng (Hiển thị Bảng trong Access), rồi kéo Chi tiết Máy đến mục trên của Cửa sổ thiết kế.
Kéo trường MachineID và IPAddress vào lưới thiết kế truy vấn.
Bây giờ bạn đã sẵn sàng để thêm các cột được tính toán. Trong cột trống đầu tiên bên phải, nhập biểu thức PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".")-1))) trong hàng Trường . Biểu thức trả về các ký tự trước dấu chấm đầu tiên (.) trong trường IPAddress.
Bây giờ, xem lại biểu thức. Vì bạn không biết phần đầu tiên của địa chỉ có bao nhiêu chữ số, bạn sử dụng hàm InStr để tìm vị trí của chu kỳ thứ nhất. Trừ 1 (để loại trừ dấu chấm) sẽ trả về số chữ số trong phần đầu tiên. Sau đó, bạn sử dụng số này với hàm Left để trích xuất số ký tự đó, bắt đầu từ ký tự ngoài cùng bên trái, từ trường IPAddress. Cuối cùng, bạn gọi hàm Val để chuyển đổi các ký tự do hàm Left trả về thành một số. Bước cuối cùng này là cần thiết vì kiểu dữ liệu cơ sở là Văn bản.Lưu truy vấn bằng cách bấm vào Lưu trênThanh công cụ Truy nhập Nhanh. Bạn nên thực hiện điều này sau mỗi bước trung gian.
Thêm cột cho phần địa chỉ thứ hai. Trong cột bên phải của Phần I, nhập Phần II: Val(Mid([IPAddress],InStr(1,[IPAddress],".")+1,InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")-InStr(1,[IPAddress],".")-1)) trong hàng Trường . Biểu thức trả về các ký tự nằm giữa kỳ thứ nhất và thứ hai trong trường IPAddress.
Một lần nữa, hãy xem lại biểu thức. Vì bạn không biết phần thứ hai của địa chỉ tạo nên bao nhiêu chữ số hoặc chính xác phần thứ hai bắt đầu từ đâu (vì bạn không biết phần thứ nhất dài bao nhiêu), bạn sử dụng hàm InStr để tìm vị trí của các chu kỳ. Sau đó, bạn sử dụng hàm Mid để trích xuất các ký tự theo sau kỳ thứ nhất nhưng trước kỳ thứ hai. Cuối cùng, bạn gọi hàm Val để chuyển đổi các ký tự do hàm Mid trả về thành một số. Bước cuối cùng này là cần thiết vì kiểu dữ liệu cơ sở là Văn bản.Thêm cột cho phần địa chỉ thứ ba. Trong cột bên phải của Phần II, nhập Phần III: 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)) trong hàng Trường . Biểu thức trả về các ký tự nằm giữa chu kỳ thứ hai và thứ ba trong trường IPAddress.
Một lần nữa, hãy xem lại biểu thức. Vì bạn không biết bao nhiêu chữ số tạo nên phần thứ ba của địa chỉ hoặc chính xác nơi phần thứ ba bắt đầu (vì bạn không biết phần thứ nhất và thứ hai dài bao nhiêu), bạn nên sử dụng hàm InStr để tìm vị trí của các chu kỳ. Sau đó, bạn sử dụng hàm Mid để trích xuất các ký tự theo sau kỳ thứ hai nhưng trước kỳ thứ ba. Cuối cùng, bạn gọi hàm Val để chuyển đổi các ký tự do hàm Mid trả về thành một số. Bước cuối cùng này là cần thiết vì kiểu dữ liệu cơ sở là Văn bản.Thêm cột cho phần địa chỉ thứ tư và cuối cùng. Trong cột bên phải của Phần III, nhập Phần IV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")+1,[IPAddress],"."))) trong hàng Trường . Biểu thức trả về các ký tự theo sau kỳ cuối cùng.
Một lần nữa, hãy xem lại biểu thức. Điều quan trọng là tìm vị trí của dấu chấm thứ ba, rồi trích xuất tất cả các ký tự theo sau nó. Vì không biết chính xác vị trí của chu kỳ thứ ba nên bạn gọi hàm InStr ba lần để tìm vị trí của chu kỳ thứ ba. Sau đó, bạn sử dụng hàm Len để tính số chữ số trong phần thứ tư. Số chữ số trả về sau đó được sử dụng với hàm Right để trích xuất số ký tự đó từ phần bên phải của trường IPAddress. Cuối cùng, bạn gọi hàm Val để chuyển đổi các ký tự do hàm Mid trả về thành một số. Bước cuối cùng này là cần thiết vì kiểu dữ liệu cơ sở là Văn bản.Đặt hàng Sắp xếp của tất cả bốn cột được tính toán là Tăng dần.
Quan trọng Hàng Sắp xếp của cột IPAddress phải được để trống.
Nếu bạn muốn sắp xếp theo giá trị trường khác, ngoài địa chỉ, hãy đặt các trường ở bên trái hoặc bên phải của tất cả bốn cột được tính. Không đặt các trường sắp xếp khác giữa các cột được tính toán.Bước tiếp theo là ẩn bốn cột được tính toán khỏi biểu dữ liệu. Tuy nhiên, trước khi bạn thực hiện việc đó, hãy chuyển sang dạng xem Biểu dữ liệu để xem kết quả của các biểu thức trong các cột được tính toán. Bảng sau đây hiển thị các cột bạn sẽ thấy trong dạng xem Biểu dữ liệu.
ID Máy IPAddress Phần I Phần II Phần III Phần IV 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 Chuyển về lại dạng xem Thiết kế và bỏ chọn hộp kiểm trong hàng Hiển thị của cả bốn cột được tính toán. Thao tác này ngăn không cho các cột đã tính toán được hiển thị trong dạng xem Biểu dữ liệu.
Bạn có thể chỉ định tùy chọn các tiêu chí để loại trừ bản ghi khỏi truy vấn.
Chuyển sang dạng xem Biểu dữ liệu để xem các bản ghi theo thứ tự đã sắp xếp. Bạn sẽ thấy các bản ghi được sắp xếp đúng theo thứ tự tăng dần của địa chỉ IP.
Cách dùng nhiều hơn để tham đối địa chỉ IP đã sắp xếp
Xác thực địa chỉ IP trong khi nhập dữ liệu
Nếu bạn muốn xác thực địa chỉ mà không cần viết mã, bạn có thể thực hiện ở mức độ hạn chế bằng cách đặt thuộc tính InputMask của trường thành ###.###.###.#; 0;" " và thuộc tính Định dạng của trường địa chỉ IP thành&&&&&&&&&&&&.
Dấu hiệu nhập có chức năng gì? Khi bạn bắt đầu nhập vào trường địa chỉ, dấu hiệu nhập sẽ ngăn bạn nhập các ký tự ngoài số và dấu cách giữa ba dấu chấm. Nếu phần số là số có hai chữ số, hãy để trống chữ số thứ ba hoặc nhập một dấu cách thay vào đó. Lưu ý rằng dấu hiệu nhập này không cảnh báo người dùng nếu họ bỏ qua việc nhập một hoặc nhiều phần của địa chỉ hoặc chỉ nhập dấu cách thay vì một giá trị số. Ví dụ: "345. .3. " sẽ được chấp nhận làm địa chỉ hợp lệ.
Định dạng hiển thị có tác dụng gì? Khi bạn nhập xong và rời khỏi trường, định dạng hiển thị sẽ loại bỏ các khoảng trắng trong địa chỉ và chỉ hiển thị số và dấu chấm. Vì vậy, nếu bạn nhập "354.35 .2 .12 " thì địa chỉ sẽ được hiển thị là "354.35.2.12". Lưu ý rằng nếu bạn bấm vào bên trong địa chỉ hoặc nhấn F2 (để vào chế độ chỉnh sửa) khi địa chỉ được chọn, các khoảng trắng sẽ xuất hiện lại.
Mẹo
Nếu bạn muốn sao chép địa chỉ, hãy di chuyển tới cột hoặc điều khiển trước, nhấn TAB để chọn địa chỉ được định dạng, rồi bấm Sao chép. Bằng cách này, bạn sẽ không sao chép chuỗi địa chỉ có chứa dấu cách.
Sắp xếp bản ghi trong biểu mẫu hoặc báo cáo theo địa chỉ IP
Nếu bạn cần tạo một biểu mẫu hoặc một báo cáo trong đó các bản ghi được sắp xếp theo địa chỉ IP, hãy dựa trên đối tượng mới trên một truy vấn sắp xếp các địa chỉ như được mô tả ở trên, thay vì dựa trên bảng lưu trữ địa chỉ.