Mr Okebab đã viết:
Chính vì không lường hết các trường hợp nên em mới đề nghị khi nhập liệu phải tuân thủ một trật tự cho trước (Dùng CF, dùng Validation, dùng công thức, dùng VBA để kiểm tra . . . Cái này trên Diễn đàn đã bàn nhiều)
Vì nếu giả sử :
- Giả sử có hơn 1 ký tự "(" : Ai(r Light Fou(ndation (156100001) . . .
- Giả sử có nhiều hơn các khoảng trắng : Air Light Foundation ( 15 610 000 1) . . .
- Giả sử có kèm theo các ký tự khác : Air Light Foundation (# 156 100001) . . .
- Giả sử có hơn một dãy chuỗi số khác :Air Light (123) Foundation (#156 10(0001) . . .
............................
Đấy, đã gọi là nhập liệu sai thì làm sao mà lường hết các hậu quả của nó được.
Thân!
Định thôi ko tham gia nữa nhưng sợ ko trả lời mọi người lại bảo ko làm được (gần 15 năm để làm những việc liên quan tới coding, kể cả viết về quy trình lập trình, cho gần trăm loại khách hàng cho gần 10 công ty rồi)
Nếu đã tính trước những trường hợp đó và biết kết quả là có định dạng như thế nào thì việc viết tương đối đơn giản. Dùng Replace và hàm cắt khoảng trống. Về bản chất, khi đã định nghĩa được cách nhập mã rồi thì họ sẽ ngăn chặn ngay từ khi gõ. Gõ xong họ sẽ validate lại dữ liệu. Quan trọng nhất là thế nào là Code (bộ mã), hay bất cứ loại dữ liệu nào như: số điện thoại, email, số tiền, ngày tháng, và ngay cả mã số thuế nếu có rule, v.v... theo đúng quy định mà mình đặt ra, mình sẽ bắt được hết các trường hợp gõ sai.
Trong mấy trường hợp "đặc biệt" trên thì làm rất đơn giản với mấy việc liên quan tới xử lý chuỗi.
Ví dụ 1 trường hợp mà nếu mọi người làm CSDL sẽ thấy kiểu nhập sở hữu cách kiểu "hai2hai' house" thì khi update sẽ rất dễ bị lỗi. Nhưng để nhập được như vậy thì sẽ phải chuyển thành "hai2hai" house". Khi đó tự Database sẽ chuyển thành "hai2hai' house".
Chắc chắn nếu mọi người đưa ra quy định về mã. Mình sẽ tạo 1 ô nhập mà bắt được mọi lỗi khách hàng cố tình nhập. Cho dù gõ thừa, thiếu, gõ ký tự đặc biệt, gõ dài quá, v.v...
Thêm nữa, khi đã có quy định từ đầu, cái edit control đó có thể được thiết lập sẵn chỉ có thể gõ được những giá trị được phép nhập thôi. (Xem ví dụ về Mask Edit Control hoặc TextBox Control trong bộ vnuniXPEditSuite do VNUNI tự phát triển)
vnuniVietDate Control chính là control cho phép gõ date time độc lập với Regional settings đó.
Về Data process validation có rất nhiều mức:
- Limitation characters on control (like mask edit, vnuniEditSuite, vnuniVietDate, v.v...)
- Validation on control (normally validate on even Validate())
- Validation on form (normally validate when click save button)
- Validation on Business (in business layer)
- Validation on Data layer
- Validation in Database (Constrains, Triggers, Store procedure,...)
Đó, trải qua ngần đó thứ validation thì dữ liệu mới được ghi vào CSDL.
Ở mỗi mức validation thì có thông báo được raise lên theo những mức độ khác nhau. (Giống như lọt cửa 1 thì vào cửa 2 bị chặn lại ấy, cửa 1 thông báo 1 kiểu, cửa 2 thông báo kiểu khác, v.v...). Phần mềm phải có tác dụng hạn chế được KH nhập sai, mà giả sử nhập sai rồi thì cảnh báo KH (với nhiều mức cảnh báo khác nhau ở trên) nhập lại chứ ko lưu vào Database. Chỉ lưu vào DB khi dữ liệu đã được validated mà thôi. Dĩ nhiên thế nào gọi là validated, tức là phải có rules cho việc thiết lập validation đó: gọi là validation rules)
Thôi, có lẽ đây là bài cuối cùng về technical. Hiện mình cũng thực sự bận quá, KH thúc vào lưng rồi nên chỉ có thể đọc và viết bài ngắn ngắn được ở thời điểm này thôi.
Cheers!
PS: Thậm chí mọi người có tin là với chức năng Auditing trong phần mềm, có thể người sử dụng vào hẳn MS SQL (chứ ko phải xóa từ phần mềm) để xóa các bản ghi trong DB đi cũng có thể khôi phục lại được hoàn toàn hoặc truy tìm ra thủ phạm là ai thực hiện công việc đó. Tuy nhiên tính năng này hơi tốn tiền của (vì dữ liệu nó lớn lắm) nên ít sản phẩm tích hợp sẵn vào trong chương trình.