با سلام و تشکر
من فایل اکسسی ساختم که یکی از جداولش دارای 12 سطر هست . در فرم طراحی شده که دارای combo box هست میخوام به همه موارد دسترسی نداشته باشه و فقط 5 مورد از 12 مورد جدول رو در زبانه combo box نمایش بده. در صورت امکان راهنمایی بفرمائید
با سلام و تشکر
من فایل اکسسی ساختم که یکی از جداولش دارای 12 سطر هست . در فرم طراحی شده که دارای combo box هست میخوام به همه موارد دسترسی نداشته باشه و فقط 5 مورد از 12 مورد جدول رو در زبانه combo box نمایش بده. در صورت امکان راهنمایی بفرمائید
سلام
معیارتون برای انتخاب 5 مورد چیست ؟
دو راه دارین:
1- برای ROW SOURCE به جای اسم جدول یک SELECT بنویسین که فقط اون 5 فیلد رو شامل بشه.
این راه بهتره
2- همون اسم جدول رو نگه دارین (همه فیلدها میان) ، ولی به COLUMN WIDTH مقدار بدین.
به این صورت که برای اون پنج فیلد مقدار غیر صفر و برای مابقی مقدار صفر تعیین کنین.
در اینصورت لازمه که ترتیب فیلدها رو طبق طراحی جدول رعایت کنین.
الآن که دقت کردم دیدم منظورتون رو درست نگرفته بودم، در واقع شما فیلتر روی رکورد میخواین نه روی فیلد.
البته اصول کار همین هست که در روش یکم گفته شد یعنی باید بجای کل جدول یک کوئری select بنویسین ولی بجای انتخاب فیلدها یک where روی نام کاربر بگذارین که بر اساس اون رکوردها انتخاب بشن.
در کل پروسه مشابه منوی کاربری هست.
والبته روش دوم هم کلا بی معنی میشه در این حالت ! از این بخش پاسخ صرفنظر کنین.
سر فرصت یک نمونه میگذارم
دیتابیس پیوست دو جدول داره: USERS که مشخصه چی هست و جدول CATEGORIES که بعنوان مرجع گزینه های موجود هست.
جدول USERS یک فیلد به نام ComboItems داره که از نوع MultiValue هست و مشخص میکنه هر user مجاز به چه انتخابهایی از Category هست .
در واقع مهم نیست اسم این جدول یا محتویاتش چی باشه - فقط بمنظور راحتی از دیتابیس northwind که روی همه سیستم ها هست امانت گرفتیم.
میتونین اسم فیلدها و جدول رو به سلیقه خودتون بگذارین ولی همین تغییرات رو در کد و طراحی فرم ها هم لحاظ کنید.
1.PNG
2.PNG
3.png
در یک ماجول متغیر پابلیک User_Name رو تعریف میکنیم که کارش نگهداری نام کاربر لاگین کرده است و در کل برنامه بهش دسترسی داریم:
Option Compare Database
Option Explicit
Public User_Name As String
کدهای فرم LogIn
Option Compare Database
Option Explicit
Private Sub Btn_Exit_Click()
DoCmd.Quit acQuitSaveNone
End Sub
Private Sub Btn_LogIn_Click()
If IsNull(Me.User) Then Exit Sub
User_Name = Me.User
DoCmd.OpenForm "Form1", , , , , acDialog
End Sub
Private Sub User_NotInList(NewData As String, Response As Integer)
Me.User.Undo
Me.User.Dropdown
Response = acDataErrContinue
End Sub
کدهای فرم Form1
Option Compare Database
Option Explicit
Const SqlQ As String = "SELECT Users.ComboItems.Value , Categories.CategoryName" & _
" FROM Users INNER JOIN Categories" & _
" ON Users.ComboItems.Value=Categories.CategoryID" & _
" WHERE Users.UserName='@UN'"
Dim RS As Recordset
Private Sub Category_NotInList(NewData As String, Response As Integer)
Me.Category.Undo
Me.Category.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Form_Close()
RS.Close
Set RS = Nothing
User_Name = ""
End Sub
Private Sub Form_Open(Cancel As Integer)
Me.WL.Caption = "Welcome " & User_Name
Set RS = CurrentDb.OpenRecordset(Replace(SqlQ, "@UN", User_Name))
Set Me.Category.Recordset = RS
Me.Category.SetFocus
Me.Category.Dropdown
End Sub
و اینهم خود برنامه