-
RE: Đóng gói ứng dụng access
yamakashi2003 > 01-10-20, 10:36 AM
(01-10-20, 12:35 AM)tranthanhan1962 Đã viết: Mình thấy các bạn xử lý vấn đề bảo mật cho accdb quá nhiều code. Thực ra với access 2007 trở đi thì nếu xử lý bảo mật OK. Thì nếu đã chuyển sang accde bảo mật cũng tương đối dễ dàng:
2/Khi đã chuyển sang accde thì làm sao design được mà phải viết code ẩn thanh design. Còn đã là một chương trình hoàn chỉnh thì phải có Custom Ribbon, Các thanh Custom Ribon hoàn toàn thay thế System Ribbon, muốn có công cụ nào thì phải tự tạo. Đâu cần đến code ẩn hiện thanh công cụ hệ thống.
Nhưng mà em thấy nếu không dùng access cùng phiên bản, cùng bít với access đã chuyển file accdb, thì không thể mở được file accde bác ạ.
Không biết bác và mọi người có cách nào giải quyết không ạ?
Mà tại sao MS lại phải giới hạn tính năng này của file accde bác nhỉ? -
RE: Đóng gói ứng dụng access
ongke0711 > 01-10-20, 11:55 AM
(01-10-20, 10:36 AM)yamakashi2003 Đã viết: Nhưng mà em thấy nếu không dùng access cùng phiên bản, cùng bít với access đã chuyển file accdb, thì không thể mở được file accde bác ạ.
Không biết bác và mọi người có cách nào giải quyết không ạ?
Mà tại sao MS lại phải giới hạn tính năng này của file accde bác nhỉ?
Không có cách nào khác nhé bạn.
Sau khi Compiled thành .ACCDE ở nền tảng nào (32 hoặc 64 bit) thì chỉ chạy cho nền tảng đó thôi nhé.
Do bên trong nó các ActiveX Control khác nhau ở 2 phiên bản, sau khi biên dịch thành mã máy thì nó không tương thích để chạy trên phiên bản khác.
Bạn chỉ có thể viết code tương thích cho cả 2 phiên bản khi khai báo các hàm APIs của Windows, để file .ACCDB có thể chạy được trên nền 32 và 64 bit. Sau khi chạy được .ACCDB ở các nền tảng khác nhau bạn mới có thể convert thành ACCDE theo 32 hay 64 bit. -
RE: Đóng gói ứng dụng access
ongke0711 > 01-10-20, 04:42 PM
(01-10-20, 12:35 AM)tranthanhan1962 Đã viết: Mình thấy các bạn xử lý vấn đề bảo mật cho accdb quá nhiều code. Thực ra với access 2007 trở đi thì nếu xử lý bảo mật OK. Thì nếu đã chuyển sang accde bảo mật cũng tương đối dễ dàng:
1/ ẨnNavigation bar: Chỉ cần bỏ check Display Navigation là ẩn ngay chứ đâu cần viết code gì
2/Khi đã chuyển sang accde thì làm sao design được mà phải viết code ẩn thanh design. Còn đã là một chương trình hoàn chỉnh thì phải có Custom Ribbon, Các thanh Custom Ribon hoàn toàn thay thế System Ribbon, muốn có công cụ nào thì phải tự tạo. Đâu cần đến code ẩn hiện thanh công cụ hệ thống.
3/Vấn đề cuối là khóa shift tránh người ta vào được Option để thay đổi thiết đặt để có thể mở những phần bị ẩn thì tôi thấy đoạn mã dưới đây OK cho tất cả các ver access kể cả các phiên bản 32 và 64 bit:
Khóa shift:
Public Function Disable_ShiftKey()
Dim db As Database
Dim prp, prptest As Property
On Error GoTo Err_Handler
Set db = CurrentDb
For Each prptest In db.Properties
If prptest.Name = "AllowBypassKey" Then
db.Properties.Delete "AllowBypassKey"
Exit For
End If
Next prptest
Set prp = db.CreateProperty("AllowBypassKey", dbBoolean, False, True)
db.Properties.Append prp
db.Properties.Refresh
msgBox "Disable Shift Key succeeded!", vbInformation
Set db = Nothing
Set prp = Nothing
Err_Exit:
Exit Function
Err_Handler:
msgBox "Error " & Err.Number & " ! " & Err.Description, vbCritical
Resume Err_Exit
End Function
Bỏ khóa shift:
Public Function Enable_ShiftKey()
Dim db As Database
Dim prp, prptest As Property
On Error GoTo Err_Handler
Set db = CurrentDb
For Each prptest In db.Properties
If prptest.Name = "AllowBypassKey" Then
db.Properties.Delete "AllowBypassKey"
Exit For
End If
Next prptest
Set prp = db.CreateProperty("AllowBypassKey", dbBoolean, True, True)
db.Properties.Append prp
db.Properties.Refresh
msgBox "Enable Shift Key succeeded!", vbInformation
Set db = Nothing
Set prp = Nothing
Err_Exit:
Exit Function
Err_Handler:
msgBox "Error " & Err.Number & " ! " & Err.Description, vbCritical
Resume Err_Exit
End Function
Phần khó nhất trong vấn đề bảo mật, tôi nghĩ rằng rắc rối nhất là ẩn nút Option, bởi vì tùy theo ver access cách xử lý phần này khác nhau nên muốn access tương thích với nhiều version phải viết nhiều thanh ribbon cho phù hợp
Thực ra cái hàm SecurityDB() nó chẳng có code gì nhiều mà nó chỉ làm đơn giản hoá các thiết lập bảo mật cho Access, mỗi loại chỉ cần 1 dòng lệnh. Ví dụ: việc tắt cái Navigation panel thay vì làm thủ công thì chỉ gọi đúng một dòng lệnh ẩn nó khi khởi động là xong. Hàm này tiện ở chỗ: trong giai đoạn thiết kế chẳng cần phải ra vô Option thủ công để ẩn hiện hoặc tắt các menu, công cụ để test thử ứng dụng vì khi ứng dụng chạy thì tính năng SecurityDB kích hoạt, khi thoát thì trả lại hiện trạng Access ban đầu.
Cái hàm ChangeProperty () sẽ giúp rút gọn code khoá Shift của anh thay vì phải khai báo lại Property mỗi khi Enable hay Disable. Hàm này chỉ cần khai báo True hay False, nên nó gọn hơn và dùng chung để kích hoạt cho tất cả các công cụ khác.
Mã PHP:ChangeProperty "AllowBypassKey", dbBoolean, locker
Cái hàm SecurityDB() là cái hàm demo tổng, tuỳ theo từng thiết kế mà kích hoạt từng menu, chứ không dùng toàn bộ cho nó phí tài nguyên.
Còn ẩn cái menu Option thì các bạn dùng thêm tab <backstage> như dưới đây:
Mã PHP:<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad">
<ribbon startFromScratch="true">
....Menu tu tao...
</ribbon>
<backstage>
<button idMso="ApplicationOptionsDialog" visible="false"/>
<button idMso="FileExit" visible="true"/>
</backstage>
</customUI> -
RE: Đóng gói ứng dụng access
tranthanhan1962 > 01-10-20, 05:52 PM
(01-10-20, 10:36 AM)yamakashi2003 Đã viết: Nhưng mà em thấy nếu không dùng access cùng phiên bản, cùng bít với access đã chuyển file accdb, thì không thể mở được file accde bác ạ.
Đầu tiên trả lời câu hỏi: Mà tại sao MS lại phải giới hạn tính năng này của file accde bác nhỉ? Đơn giản chỉ là kỹ thuật bán hàng của Microsoft. Tôi không nói ở Việt Nam một nơi đầy phần mềm cr@ck (Hỏi nhỏ bạn một câu, bạn có biết bản Office của bạn có giá bao nhiêu không? OK! Nếu ban không biết thì bạn đang xài bản office lậu. Bạn cứ yên tâm, 99% anh em trên forrum thủ thuật access cũng vậy, kể cả tôi. Kể cả mấy cái máy vi tính của Ủy ban nhan dân phường bạn đang ở cũng đang sử dụng office lậu nốt). Bỏ qua chuyêng đó! Ở nước ngoài, những người như bạn và tôi được gọi là master software writer. Họ có hiệp hội đàng hoàng. Khi họ viết phần mềm cho khách hàng họ phải trả tiền bản quyền office cho microsoft và khách hàng của họ cũng vậy. Và cái chiêu không tương thích là để cho họ bán được số lượng lớn bản quyền office.
Không biết bác và mọi người có cách nào giải quyết không ạ?
Mà tại sao MS lại phải giới hạn tính năng này của file accde bác nhỉ?
Tất nhiên Microsoft cũng cho cách giải quyết các vấn đề để tương thích. Tôi có thể đưa ra vài ví dụ:
Đây là cặp mã để xử lý khi chạy cho cả bản 32 và 64 bit
#If VBA7 Then
Lệnh chạy cho bản 64 bit
#Else
Lệnh chạy cho bản 32 bit
#End If
Mã kiểm tra phiên bản version (Kiểm tra version trươc khi chạy lệnh)
Application.Version
Access 2003: 11.0 - Access 2007: 12.0 - Access 2010: 14.0 - Access 2013: 15.0 - Access 2016 và Access 2019: 16.0
Nếu bạn muốn viết một phần mềm tương thích với tất cả các máy. Bạn phải có đầy đủ các lệnh, khi nó kiểm tra đúng version nào thì nó sẽ chạy lệnh của version đó.
Ví dụ: Access 2003 sử dụng menu (Ví dụ: Menu1) và access 2007 trở lên sử dụng Ribbon (Ví dụ: Ribbon1) thì khi xuất hiện form login bạn phải có đoạn code:
Private Sub Login_Load()
If Application.Version =11.0 Then
CommandBars("Menu1").Enabled = True
Else
Me.RibbonName = "Ribbon1"
End If
End Sub
Đoạn code này tôi chỉ sử dùng hàm if để xử lý cho access 2003 còn access 2007 trở đi mã gọi ribbon là như nhau nên dồn tất cả vào else. Khi mở chương trình load form login nó sẽ kiểm tra và xử lý tùy theo version của access. Đây chỉ là những lệnh đơn giản, ngoài ra còn trăm thứ nữa mà bạn cần phải nghiên cứu. (Nhớ là phải viết bằng mbd thì mới xử dụng dược cách này, vì access 2003 không mở được accdb nhưng access 2007 trở đi vẫn mở dược mbd) -
RE: Đóng gói ứng dụng access
http2 > 07-08-21, 01:31 PM
thực ra mọi người làm gì cho rắc rối vậy . vào option của access . xong vào mục Current Database . xong mục Application( bỏ chọn Display status bar) . mục Navigation (bỏ chọn Display Navigation pane) kéo xuống . mục ribbon and toolbar options (bỏ chọn allow full menus , allow default shortcut menus , allow built - in toolbars)
trước tiên tạo 1 module chép đoạn code này vào .
Public Sub ThietLapPhimTat(propname As String, _
propdb As Variant, prop As Variant)
'Set passed startup property.
Dim dbs As Object
Dim prp As Object
Set dbs = CurrentDb
On Error Resume Next
dbs.Properties(propname) = prop
If Err.Number = 3270 Then
Set prp = dbs.CreateProperty(propname, _
propdb, prop)
dbs.Properties.Append prp
End If
Set dbs = Nothing
Set prp = Nothing
End Sub
xong bạn tạo 2 command _click () "1 cái là on shift 1 cái là off shift xong
cóp hai đoại code này vào
Call ThietLapPhimTat("AllowBypassKey", dbBoolean, False)
Call ThietLapPhimTat("AllowSpecialKeys", dbBoolean, False)
cmd on shift cái đổi 2 cái false thành true .
cmd off shift thì 2 cái false không cần đổi .
chúc bạn thành công . nếu như bạn tìm cách giáu luôn hai cái command thì không ai mở được cái code hay là chỉ sửa table hay là mở cái access option