کنترل‌های تعاملی فرم و سطوح امنیت کاربر | Microsoft Access 2010 VBA

کنترل‌های تعاملی فرم و سطوح امنیت کاربر

توسط admin | گروه آموزش اکسس Microsoft access | 1405/05/16

نظرات 0

کنترل‌های تعاملی فرم و سطوح امنیت کاربر

فصل ۳۹ — تعاملی کردن Controlهای Form

VBA می‌تواند Controlهای Form را Interactive کند. انتخاب User در یک Drop-down می‌تواند انتخاب‌های Drop-down دیگر را تعیین کند یا باعث Hidden/Disabled شدن Controlهای دیگر شود. اگر درست پیاده‌سازی شود، هنگام Browse رکوردها نیز Controlها خودکار واکنش نشان می‌دهند.

ساخت Table ساده

Tableای با سه Field متنی SupplierName، SupplierSize و SupplierRef بسازید و با نام tblSupplier ذخیره کنید. Primary Key لازم نیست. SupplierSizeها باید Small، Medium یا Large باشند.

شکل ۳۹-۱ — پنجرهٔ طراحی Table تأمین‌کنندگان
شکل ۳۹-۱ — پنجرهٔ طراحی Table تأمین‌کنندگان
شکل ۳۹-۲ — داده‌های Table تأمین‌کنندگان
شکل ۳۹-۲ — داده‌های Table تأمین‌کنندگان

ساخت Form برای Table

Form Design بسازید، Record Source را tblSupplier قرار دهید و دو Combo Box و یک Text Box اضافه کنید. Control Source اولی SupplierSize، دومی SupplierName و Text Box برابر SupplierRef باشد. Row Sourceِ SupplierSize:

SELECT DISTINCT SupplierSize FROM tblSupplier;
شکل ۳۹-۳ — Form تأمین‌کننده در Design mode
شکل ۳۹-۳ — Form تأمین‌کننده در Design mode

برای Combo0 (فرض شده Combo مربوط به SupplierSize است) Eventِ Change را انتخاب کنید:

Private Sub Combo0_Change()
Dim strTemp As String
Me.Combo0.SetFocus
strTemp = Me.Combo0.text
Me.Combo2.SetFocus
Me.Combo2.RowSource = _
"select distinct SupplierName from tblSupplier where SupplierSize='" _
& strTemp & "'"
If strTemp = "Small" Then
Me.Text4.Visible = False
Else
Me.Text4.Visible = True
End If
Me.Combo0.SetFocus
End Sub

نام‌های پیش‌فرض مثال Combo0، Combo2 و Text4 هستند. مقدار SupplierSize در String گرفته و Row Sourceِ SupplierName بر اساس آن Filter می‌شود. اگر Size برابر Small باشد Text4 پنهان می‌شود.

در Eventِ Current فرم بنویسید:

Private Sub Form_Current()
Combo0_Change
End Sub

در نتیجه هنگام Browse رکوردهای tblSupplier نیز فرم خودکار مطابق SupplierSize Update می‌شود. تغییر SupplierSize نیز List مربوط به SupplierName را فوراً تغییر می‌دهد.

فصل ۴۰ — تنظیم سطوح امنیت کاربر

چون Application احتمالاً Multiuser است، باید مشخص شود هر User چه چیزی را می‌تواند ببیند یا تغییر دهد. ممکن است Userهای Basic فقط اطلاعات پایه ببینند، گروهی بیشتر ببینند اما نتوانند Edit کنند، گروهی رکوردها را تغییر دهند و Administratorها User و Privilege بسازند.

Tableای به نام tblUserRights با دو Text Field به نام‌های UserName و UserLevel بسازید. Windows Login ID هر User و Level او را وارد کنید. Levelهای مثال: administrator، expert، novice و basic.

Declaration گرفتن User Name:

Public Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function عمومی گرفتن User Level:

Public Function ReturnUserLevel()
Dim strUser As String, X As Integer, RecSet as Recordset
strUser = Space$(256)
X = GetUserName(strUser, 256)
strUser = RTrim(strUser)
strUser = Left(strUser, Len(strUser) - 1)
Set RecSet = CurrentDb.OpenRecordset _
("select * tblUserRights where UserName='" & strUser & "'")
If RecSet.RecordCount Then
ReturnUserLevel = RecSet!UserLevel
Else
ReturnUserLevel = "unknown"
End If
Set RecSet = Nothing
End Function

Function، Windows Login را می‌گیرد و Recordset را بر اساس tblUserRights Filter می‌کند؛ اگر رکورد وجود داشته باشد UserLevel و در غیر این صورت unknown برگردانده می‌شود.

برای Form مخصوص Administrator:

If ReturnUserLevel <> "administrator" Then
MsgBox "You are not authorized to view this screen", vbCritical
DoCmd.Close
End If

برای دسترسی Read-only کاربر Basic و Edit برای بقیه:

If ReturnUserLevel = "unknown" then DoCmd.Close
If ReturnUserLevel = "basic" Then
Me.AllowAdditions = False
Me.AllowEdits = False
Me.AllowDeletions = False
Else
Me.AllowAdditions = True
Me.AllowEdits = True
Me.AllowDeletions = True
End If

برای مخفی‌کردن بعضی Controlها از Basic و Novice:

If ReturnUserLevel = "unknown" then DoCmd.Close
If ReturnUserLevel = "basic" Or ReturnUserLevel = "novice" Then
Me.Text1.Visible = False
Me.Label2.Visible = False
Else
Me.Text1.Visible = True
Me.Label2.Visible = True
End If

وقتی Control پنهان می‌شود Label همراه آن نیز باید پنهان شود. این روش همراه با قفل‌کردن Database در فصل ۲۴، Discipline مناسبی برای محدودکردن مسیرها و عملیات کاربران ایجاد می‌کند.

صفحهٔ پایانی این بخش در نسخهٔ اصلی عمداً خالی است.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500