biểu mẫu frmKhoiDong luôn được hiển thị trước tiên bằng cách xác định Display Form/Page là frmKhoiDong. Để thay đổi thuộc tính AllowBypassKey, bắt buộc phải mở CSDL, gán trị mới cho thuộc tính này, đóng CSDL lại thì lần mở sau mới có ép-phê. Bạn nhớ, cần khóa làm sao để người ta không mở được mà mình mở được, nghĩa là ta phải có chìa khóa để mở. Chìa ở đây chính là một biểu mẫu khác, chẳng hạn có tên là frmChiaKhoa. Khi đã thay đổi thuộc tính AllowBypassKey được rồi, chắc chắn biểu mẫu frmKhoiDong được hiển thị khi mở CSDL. Cho nên ta đặt chìa khóa thông qua biểu mẫu này bằng cách vẽ một ô điều khiển nào đấy (miễn sao nó có thủ tục xử lý tình huống Click là được), chẳng hạn nhãn lblChiaKhoa, rồi đặt thuộc tính Visible là No và thêm dòng lệnh DoCmd.OpenForm “frmChiaKhoa” vào thủ tục xử lý tình huống Click. Bạn phải nhớ vị trí nhãn lblChiaKhoa để lôi chìa khóa ra nhé. Như vậy, vấn đề còn lại nằm ở biểu mẫu frmChiaKhoa. Bạn mở cửa sổ soạn thảo Microsoft Visual Basic, chọn mục References… để bảo đảm Microsoft DAO xx.xx Object Library (trong đó, phiên bản xx.xx có thể là: 2.5 hoặc 3.51 hoặc 3.6 tùy theo phiên bản Access, dĩ nhiên nên chọn phiên bản mới nhất) đã được chọn trong danh sách Available References. Hình 1: Biểu mẫu cần thiết kế Hình 1 là biểu mẫu frmChiaKhoa cần thiết kế, bao gồm một ô văn bản txtPassword để nhận mật khẩu mà người cần mở khóa phải gõ vào, một nút lệnh cmdLock thực hiện việc khóa CSDL và một nút lệnh cmdUnlock thực hiện việc mở khóa CSDL. Xong, bạn gõ các thủ tục xử lý như đoạn mã 1. Trước khi quậy chuyện này trên một CSDL, bạn nên sao chép phòng hờ CSDL để tránh sự cố khóa được rồi nhưng không mở được (do bạn gõ nhầm các dòng lệnh). Đoạn mã 1 'Hàm ChangeProperty thay đổi các thuộc tính của CSDL Function ChangeProperty(strPropName, varPropType, varPropValue) Dim dbs As Database, prp As Property Const conPropNotFoundError = 3270 Set dbs = CurrentDb On Error GoTo Change_XuLyLoi dbs.Properties(strPropName) = varPropValue ChangeProperty = True Change_KetThuc: Exit Function Change_XuLyLoi: 'Thuộc tính không thấy If Err = conPropNotFoundError Then Set prp = dbs.CreateProperty(strPropName, _ varPropType, varPropValue) dbs.Properties.Append prp Resume Next Else 'Không biết lỗi gì ChangeProperty = False Resume Change_KetThuc End If End Function 'Xử lý tình huống chọn nút [Khóa database] Private Sub cmdLock_Click() ‘Biểu mẫu này được nạp trước ChangeProperty "StartupForm", dbText, "frmKhoiDong" ChangeProperty "StartupShowDBWindow", dbBoolean, False ChangeProperty "StartupShowStatusBar", dbBoolean, False ChangeProperty "AllowBuiltinToolbars", dbBoolean, False ChangeProperty "AllowFullMenus", dbBoolean, False ChangeProperty "AllowBreakIntoCode", dbBoolean, False ChangeProperty "AllowSpecialKeys", dbBoolean, False ‘Không cho xài phím Shift để bỏ qua biểu mẫu frmKhoiDong ChangeProperty "AllowBypassKey", dbBoolean, False MsgBox "Cơ sở dữ liệu đã được khóa! Đóng cơ sở dữ liệu, ê.", vbOKOnly, " Security" cmdExit.SetFocus cmdUnlock.Visible = True cmdLock.Visible = False End Sub 'Xử lý tình huống chọn nút [Mở database] Private Sub cmdUnlock_Click() ‘Không cần biểu mẫu khởi động nữa ChangeProperty "StartupForm", dbText, "" ChangeProperty "StartupShowDBWindow", dbBoolean, True ChangeProperty "StartupShowStatusBar", dbBoolean, True ChangeProperty "AllowBuiltinToolbars", dbBoolean, True ChangeProperty "AllowFullMenus", dbBoolean, True ChangeProperty "AllowBreakIntoCode", dbBoolean, True ChangeProperty "AllowSpecialKeys", dbBoolean, True ChangeProperty "AllowBypassKey", dbBoolean, True MsgBox "Cơ sở dữ liệu đã được mở khóa ! _ Đóng cơ sở dữ liệu,.", _ vbOKOnly, " Security" cmdExit.SetFocus txtPassword = "" cmdLock.Visible = True cmdUnlock.Visible = False txtPassword.Visible = False End Sub 'Xử lý tình huống khi mở biểu mẫu Private Sub Form_Open(Cancel As Integer) Dim dbs As Database Set dbs = CurrentDb On Error GoTo KhongCoThuocTinh_Err If dbs.Properties("AllowBypassKey") Then cmdLock.Visible = True txtPassword.Visible = False Else cmdLock.Visible = False txtPassword.Visible = True End If Exit Sub KhongCoThuocTinh_Err: cmdLock.Visible = True txtPassword.Visible = False End Sub 'Khi người ta gõ mật khẩu và nhấn phím Enter Private Sub txtPassword_LostFocus() If txtPassword = "echip" Then cmdUnlock.Visible = True End If End Sub Tác giả: (someone) Lập trình an toàn với Ada Ada là ai? Ada là ngôn ngữ lập trình xuất xứ từ Bộ quốc phòng Mỹ vào khoảng nửa đầu thập niên 80 của thế kỷ 20. Ngôn ngữ này được đặt tên theo Ada Augusta nữ bá tước xứ Lovelace (1815 – 1852), nhà toán học với ý tưởng tiên phong coi phần cứng và phần mềm là hai mặt khác nhau đã đi vào lịch sử như lập trình viên đầu tiên và hacker đầu tiên của loài người (1). Nhu cầu của Lầu Năm Góc lúc đó là một ngôn ngữ lập trình duy nhất thay thế cho khoảng 500 ngôn ngữ dùng cho các hệ thống nhúng (embedded). Đặc trưng của các hệ thống như thế là phần cứng đa dạng, phần cứng liền với phần mềm, phần mềm hệ thống liền với phần mềm ứng dụng, thời gian sử dụng lâu dài, tính chất thời gian thực (real-time) và độ bền cao (high-integrity) thể hiện rõ, nhiều hệ thống nhúng là hệ phân tán (distributed). Ngôn ngữ lập trình đáp ứng những yêu cầu đó phải chặt chẽ, nhỏ gọn nhưng có sức biểu diễn lớn, viết mã nguồn dễ đọc, sinh mã đích hiệu quả. Vì thế Ada xuất phát từ Pascal, nhưng kiểm tra kiểu mạnh hơn. Mở rộng kiểu (type extension), kế thừa (inheritance) và đa kế thừa giao diện (multiple interface inheritance) hỗ trợ lập trình định hướng đối tượng. Ngoài các kết cấu điều khiển thông thường như rẽ nhánh, lặp, xử lý ngoại lệ (exception), và kết cấu đơn vị thông thường như thủ tục (procedure), hàm (function), Ada còn có kết cấu gói (package)(2) hỗ trợ lập trình modular, kết cấu mẫu (generic)(3) hỗ trợ lập trình mẫu, kết cấu tác vụ (task)(4) và kiểu có bảo vệ (protected type)(5) hỗ trợ lập trình song song và tương tranh. Ngoài các ứng dụng truyền thống trong vũ khí, khí tài và các hệ thống liên lạc, tham mưu, chỉ huy, tác chiến, sau hơn 2 thập kỷ ngày nay Ada còn được dùng trong các ứng dụng của ngành thám hiểm không gian, hàng không, giao thông sắt & bộ, năng lượng hạt nhân, viễn thông, và tài chính – ngân hàng. Xem (6). Trên thế giới, tỉ lệ lập trình viên sử dụng ngôn ngữ Ada chiếm khoảng 5%. Xem (7). Ada có bộ biên dịch miễn phí GNAT và môi trường phát triển miễn phí GPS, sinh mã đích cho rất nhiều platform khác nhau. Loạt bài này hoàn toàn không có tham vọng dạy cho ai đó lập trình bằng ngôn ngữ Ada. Một bài tổng quan về Ada cũng dài hơn 100 trang (8 ). Ngôn ngữ này nếu muốn học đầy đủ cần phải đọc vài quyển sách dày (9, 10). Dẫu vậy, để cho mọi người đều thấy Ada không phải là một ngôn ngữ gì quái dị mà ngược lại, hết sức bình dị, xin trình diễn một màn Hello World nho nhỏ. Code: with Ada.Text_IO; use Ada.Text_IO; procedure Hello_Main is begin Put_Line("Hello world!"); end; ______________________________ NOTES (1) Ada Augusta Lovelace đã giúp Charles Babbage làm dự án xây dựng Analytical Engine, chiếc máy tính lập trình được đầu tiên. Xem http://www.fourmilab.to/babbage/contents.html. (2) Tương tự module trong Modula hoặc unit trong Borland Pascal. (3) Tương tự generic trong C# hoặc template trong C++. (4) Tương ứng với quá trình (process) hay luồng (thread), khái niệm thường gặp khi nói về các hệ điều hành. (5) Xuất phát từ monitor (Modula), nhưng kết cấu này đã được phát triển thêm cú pháp và ngữ nghĩa phản ánh những kết quả nghiên cứu mới về lập trình song song. (6) Feldman M. B.: Who's Using Ada? Real-World Projects Powered by the Ada Programming Language. 2002. http://www.seas.gwu.edu/~mfeldman/ada-project-summary.html. (7) Smith J.: What About Ada? The State of the Technology in 2003. Technical Note. Sofware Engineering Institute of Carnegie Mellon University 2003. (8 ) Feldman M. B.: Ada 95 in context. George Washington University 1999. Adapted and updated from Chapter 10, Handbook of Programming Languages, vol. 1, Object-Oriented Languages. Macmillan 1998. . Ada 95 in context. George Washington University 1999. Adapted and updated from Chapter 10, Handbook of Programming Languages, vol. 1, Object-Oriented Languages. Macmillan 1998. . song song. (6) Feldman M. B.: Who's Using Ada? Real-World Projects Powered by the Ada Programming Language. 2002. http://www.seas.gwu.edu/~mfeldman/ada-project-summary.html. (7)