بحث مخصص من جوجل فى أوفيسنا
Custom Search
|
-
Posts
2349 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
59
Community Answers
-
Moosak's post in 💥 التحدي 2 : إنشاء نظام تسجيل دخول احترافي برمجياً ، مع نظام صلاحيات متعدد المستويات was marked as the answer
السلام عليكم ورحمة الله وبركاته 🙂🖐
يقول المثل : أن تأتي متأخرا خير من أن لا تأتي 😅✌
بعد جهد جهيد إنتهيت من تصميم نظام تسجيل دخول + نظام صلاحيات متطور
كلما أخطو فيه خطوة أجد أنه ناقص وتطلع أفكار جديدة .. 😅👊 لذلك قلت سأنزلها كما هي الآن ..
حاولت تبسيطه للمستخدم والمستفيدين منه لاحقا قدر المستطاع ..
وسأبدأ بواجهة تسجيل الدخول المتواضعة :
المزايا :
حفظ بيانات دخول المستخدم (اختياري)
الدخول مباشرة بمجرد كتابة كلمة المرور بشكل صحيح (تسريع عملية الدخول)
ملاحظة : جميع كلمات المرور في البرنامج : 123
ثانيا الواجهة الرئيسية :
يتم تطبيق الصلاحيات للمستخدم بمجرد تسجيل الدخول ..
ثالثا : إدارة المستخدمين
هنا يتم إدارة جميع ما يتعلق بمستخدمي البرنامج ( إضافة ، تعديل ، حذف ، تعيين الصلاحيات )
رابعا : إدارة مجموعات العمل والصلاحيات لكل مجموعة
هنا يتم ضبط الصفحات المسموح لكل مجموعة دخولها والصلاحيات الخاصة بكل صفحة ..
ومثل ماهو واضح يمكن إضافة النماذج أو إزالتها كما يحلو لك
وبعد ضبط مجموعات العمل يتم تعيين كل مستخدم للمجموعة الخاصة به ، ويمكن عمل مجموعة خاصة لشخص واحد فالخيارات غير محدودة .. 🙂
الآن يمكنك الخروج من البرنامج ثم تجربة تسجيل الدخول باسم المستخدمين المسجيلين في البرنامج للاستمتاع بتجربة الصلاحيات الممنوحة لكل مستخدم 😊
وبعد الدخول للصفحات يتم تطبيق الصلحيات الخاصة بالنموذج أيضا ..
وبقية الصلاحيات ستظهر حسب الزر الذي يتم الضغط عليه
مزايا إضافية موجودة في البرنامج .. ولها علاقة بالأمان أيضا .. نظام النسخ الاحتياطي
وله إعدادات خاصة به (نسخ احتياطي يدوي أو تلقائي ) وهو موجود في صفحة إعدادات البرنامج :
ولكل مستخدم مجموعة خيارات يمكنه التحكم بها مثل ( تغيير كلمة المرور ، التشغيل عند إقلاع الجهاز ، إنشاء اختصار في سطح المكتب ، حفظ بيانات التسجيل لتسريع الدخول للبرنامج)
هذه هي أهم الميزات التي يحتويها البرنامج 🙂
ولفتح البرنامج في وضع التصميم ، حتى هذي سهلة للمبرمج 😅🖐
في صفحة تسجيل الدخول وكذلك الصفحة الرئيسية يوجد هذا الزر الخاص بالمبرمج >>
بعد الضغط عليه >> أدخل كلمة المرور : 123 ويمكنك تغييرها من الكود الخاص بالزر ..
بتظهر لك هذي النافذة الخاصة بالمبرمج فقط :
وأهم ما فيها :
(1) عرض الشريط العلوي ونافذة الأكسس >> بعد تفعيله تحفظ وتشغل الماكرو وبتنفتح عندك واجهة الأكسس >> أعد تشغيل البرنامج من جديد للحصول على جميع الميزات.
(2) اسم نموذج البداية >> وهو أو نموذج بيشتغل معاك في البرنامج >> وهذا يسهل على المبرمج تطبيق النظام على أي برنامج آخر 🙂
(3) اسم البرنامج (واللي ييظهر في الشريط العلوي للأكسس) :
(4) رقم الإصدار (نسخة البرنامج) وتاريخها >> ويمكن الاعتماد عليها لتحديث البرنامج لاحقا ..
(5) إدارة نماذج الصلاحيات >> وهي النماذج اللي ستسمح بإعطاء صلاحيات لدخولها للبرنامج .. وكذلك تعطي كل نموذج اسم صديق للمستخدم وسيتم استخدام المسمى الحقيقي للنموذج داخليا ..
وهكذا أكون شرحت لكم أهم المميزات ويتبقى نقطة مهمة وهي :
يمكن للمبرمج الآن الاستفادة من هذا الملف فهو قاعدة جاهزة لإنطلاق في تصميم برنامجك الخاص ..
جميع الأكواد الخاصة بالصلاحيات ستجدها في الموديول التالي :
وأهم ما ستحتاج معرفته في كيفية تطبيق الصلاحيات ذكرته في الملاحظات المكتوبة أول الموديول :
' (1) : لتطبيق صلاحية فتح النماذج وصلاحيات الإضافة والتعديل والحذف تضع الأسطر التالية أول الأكواد في حدث فتح النموذج '------------------------------------------------------------------------------- 'Private Sub Form_Open(Cancel As Integer) ' ' فحص صلاحة دخول النموذج ' Cancel = Not Permission_OpenForm(Me.Name, True) ' ' تطبيق صلاحيات : الإضافة / التعديل / الحذف ' Apply_Addition_Edits_Delete_Permissions (Me.Name) 'End Sub '------------------------------------------------------------------------------- ' (2) : لتطبيق صلاحيات الطباعة والاستيراد والتصدير داخل نموذج معين تكتب هذه الأسطر لمعرفة وجود الصلاحة من عدمها ' : وكل سطر من هذه الصلاحيات يرجع لك النتيجة كما يلي ' True : مسموح ' False : ممنوع '------------------------------------------------------------------------------- ' 1- فحص صلاحية الطباعة (True/False) ' Permission_Print(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها ' 2- فحص صلاحية الاستيراد (True/False) ' Permission_Import(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها ' 3- فحص صلاحية التصدير (True/False) ' Permission_Export(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها '------------------------------------------------------------------------------- والنماذج الموجودة في البرنامج مع أزرارها تم تطبيق الأكواد عليها بشكل عملي << راجعها وأدرسها لمعرفة كيفية عملها .. وهي سهلة يسيرة بفضل الله 🙂
وهذا مثال عملي لتطبيق الصلاحية على زر الطباعة (فتح التقرير) مثلا :
وهكذا بقية الصلاحيات (اطلع على بقية الموديول) تم تحويلها لأسطر قليلة بسيطة للاستفادة منها بكل يسر .. 🙂
وأخيرا تحميل البرنامج ::
Moosak Login System with permissions 1.0.zip
:: وآخر دعوانا أن الحمد لله رب العالمين ::
-
Moosak's post in شريط متحرك was marked as the answer
وعليكم السلام ورحمة الله وبركاته 🙂
تفضل أخي بلالشريط متحرك.mdb
-
Moosak's post in رجاء فحص الكود التالى كتحسين له was marked as the answer
وعليكم السلام ورحمة الله 🙂
باستخدام هذه الأداة :
Private Sub cmdPrint_Click() On Error GoTo Err_cmdPrint_Click Dim Index3 As Variant Dim repName As String Dim ftrName As String ' Declare ftrName, assuming it's a String for the filter argument. ' Check if any items are selected from the listbox. If L3.ItemsSelected.Count = 0 Then MsgBox "لا يوجد مطبوغات قد تم اختيارها", vbInformation + vbMsgBoxRight, "تنبيه " Exit Sub End If ' Loop through each selected item and open the corresponding report. For Each Index3 In L3.ItemsSelected repName = L3.ItemData(Index3) repName = "تقرير_" & repName DoCmd.OpenReport repName, acViewNormal, , ftrName Next Index3 Exit_cmdPrint_Click: Exit Sub Err_cmdPrint_Click: MsgBox Err.Description Resume Exit_cmdPrint_Click End Sub مع اختيار :
والتعليمات نفس رسالتك مع تغيير بسيط :
الكود التالى يعمل بدون مشاكل
ولكن هناك سطور مكررة متداخلة به
يرجى ضبط بناء الكود لاختصاره وتحسينه
-
Moosak's post in عرض التقرير داخل النموذج was marked as the answer
تفضل أخي بلال .. 🙂
الزر الثاني :
Me.SubForm.SourceObject = "Report.Report_Rpt"
222222.accdb
-
Moosak's post in المطلوب دالة كمعيار في الاستعلام تحمل قيمتين أو اكثر لتصفية أيام الأسبوع was marked as the answer
وعليكم السلام 🙂
تفضل أستاذنا العود
Database1_Moosa.accdb
-
Moosak's post in عمل استعلام يقوم بمسح محتويات جدول was marked as the answer
تفضل أخي عبدالعزيز @Abdelaziz Osman 🙂
هذا الاستعلام لو بتشغله في ال VBA :
' DELETE statement | جملة DELETE Dim sqlDelete As String sqlDelete = "DELETE FROM [TABINDX]" sqlDelete = sqlDelete & " WHERE [ID] = " & var_ID ' Execute The Query | تنفيذ الاستعلام CurrentDb.Execute sqlDelete وهذ لو بتشغله كاستعلام أكسس :
DELETE FROM [TABINDX] WHERE [ID] = var_ID ولا تنسى أن تضع قيمة ال ID المطلوب حذفه مكان الـمتغير : var_ID
ولو بتحذف كافة محتويات الجدول تكتب كذا :
CurrentDb.Execute "DELETE FROM TABINDX"
-
Moosak's post in مطلوب اظهار الساعة تعمل داخل النموذج (الساعة والدقائق والثواني ) من غير استخدام عداد (تايمر) النموذج was marked as the answer
طيب كفكرة ممكن تعمل الساعة لحالها في نموذج فرعي وتعمل الحدث في النموذج الفرعي بدون ما يأثر على أحداث النموذج الرئيسي 🙂
Clock In Sub Form.accdb
-
Moosak's post in مطلوب اظهار السجل حسب اليوم والوقت الحالي was marked as the answer
بأبسط الامكانيات عملت لك حقلين في الأستعلام من نوع (True / False ) الأول يتحقق من دخول الفترة الزمنية نطاق التنفيذ .. والثاني يتحقق من أن الأيام دخلت نطاق التنفيذ ..
وبالتالي صار سهل جدا فلترة السجلات بناءا عليهما :
وهكذا تضع الشروط بكل سهولة 🙂 :
Database1 (1).accdb
-
Moosak's post in كود لفتح This PC was marked as the answer
ضع هذا السطر على أمر عند النقر للزر :
Shell "explorer shell:MyComputerFolder", vbNormalFocus 🙂
-
Moosak's post in الاستعلام بالرقم من ااكود was marked as the answer
وعليكم السلام 🙂
عدل كود فتح التقرير هكذا :
DoCmd.OpenReport "rprepnu2", acViewPreview, , "[lagnano] >= " & Nz(Me.tt1, 0) & " And [lagnano] <= " & Nz(Me.tt2, 0), acNormal
lagna2.accdb
-
Moosak's post in طباعة تقرير مصمم في ورقة ذات حجم أكثر من A3 في ورقة A4 was marked as the answer
بدون الحاجة لأي تدخل برمجي أعتقد أنه بإمكانك إعادة تنسيق وتظبيط تنسيق التقرير وتضغير الحقول والخطوط لتلائم حجم ال A4 مباشرة 🙂
وهذه تجربتي :
base_A.accdb
-
Moosak's post in تثبيت قيمة افتراضية لمربع نص اعتمادا على نماذج مستمرة was marked as the answer
جرب تغيير القيمة من القوائم المنسدلة 🙂 :
baseV.accdb
وهذا تعديل آخر في حال أنك لم ترد تغيير الدرجات السابقة للأشخاص الذين تم إدخال درجاتهم مسبقا ..
baseV.accdb
-
Moosak's post in تثبيت الخطوط المستخدمة في البرنامج عند فتح قاعدة البيانات was marked as the answer
مشاركة مع الإخوة الأعزاء 🙂
هذه طريقتي في تضمين الخطوط في البرنامج ..
1- إرفاق الخطوط في البرنامج في جدول معد لذلك وبه حقل مرفقات :
2 - في الموديول كود يقوم باستخراج الخطوط ووضعها في مجلد بجانب قاعدة البيانات :
3 - يقوم الكود بتنصيب الخطوط تلقائيا بدون تدخل من المستخدم وذلك عن طريق الماكرو ( وبالمناسبة هو نفس الأمر الذي يستخرج الخطوط من الجدول ) 🙂
4- وبعدها ستجد أن الخطوط تعمل لديك بشكل جيد بدون مشاكل إن شاء الله 🙂
للتطبيق على برنامجك أنقل جميع العناصر لبرنامجك وغير الخطوط في الجدول .
الملف : Add Fonts.accdb
-
Moosak's post in عند الرجوع من نموذج فرعي للرئيسى مطلوب تحديث فوري لعرض ماتم حذفه was marked as the answer
الموضوع بسيط جدا ..
في حدث عند الإغلاق لنماذج الإدخال أو عند زر الرجوع للشاشة الرئيسية ضع هذا الكود وغير أسماء مربعات النص التي بها عدادات الأرقام :
On Error Resume Next [Forms]![frm_basic]![TxtBox1].Requery ' تحديث العداد الأول [Forms]![frm_basic]![TxtBox2].Requery ' تحديث العداد الثاني [Forms]![frm_basic]![TxtBox3].Requery ' تحديث العداد الثالث
-
Moosak's post in مساعدة في شروط ادخال البيانات was marked as the answer
وعليكم السلام ورحمة الله وبركاته .. 🙂
استخدم الدالة Trim لحذف المسافات قبل وبعد النص في حدث بعد التحديث للحقل .
-
Moosak's post in احصاء بالعدد ومجموع المبالغ بحسب الجهة was marked as the answer
وعليكم السلام ورحمة الله وبركاته 🙂
أنشيء هذا الاستعلام :
وهذا الناتج :
وبعدها صمم تقرير مبني على هذا الاستعلام .. 🙂
احصاء بالعدد والمبلغ.rar
-
Moosak's post in تقرير واحد للبرنامج was marked as the answer
وعليكم السلام ورحمة الله وبركاته 🙂
لن تحتاج لكل هذه التقارير والاستعلامات ..
وضعت لك استعلام واحد وتقرير واحد لكل الصفوف :
والتقرير حسب الاختيار من القائمة :
درجات الطلاب.accdb
-
Moosak's post in كود لتطبيق السداد عل ى اكثر من سجل بضغطة زر واحدة was marked as the answer
وعليكم السلام ورحمة الله وبركاته 🙂
كتبت لك كود يراعي أن يكون المبلغ المدفوع أقل من أو يساوي المدفوع
وكذلك الكود يكمل على الدفع السابق في حال أنه تم دفع جزء من المبلغ سابقا..
تفضل هذا هو الكود :
Private Sub Command6_Click() Dim PayedAmount As Double, Amount As Double, Remaining As Double Dim RS As DAO.Recordset Dim SQl As String PayedAmount = Nz(Me.Text4, 0) If PayedAmount = 0 Then MsgBox "أدخل المبلغ": Exit Sub Remaining = Nz(DSum("rest", "Table1", "cod = " & [Forms]![Form1]![sh]), 0) If PayedAmount > Remaining Then MsgBox "المبلغ المدفوع أكبر من المبلغ المتبقي للسداد": Exit Sub SQl = "SELECT * FROM Table1 WHERE Table1.rest > 0 AND Table1.cod = " & [Forms]![Form1]![sh] Set RS = CurrentDb.OpenRecordset(SQl) Do While Not RS.EOF RS.Edit If PayedAmount >= RS.Fields("rest") Then Amount = RS.Fields("rest").Value RS.Fields("pye").Value = RS.Fields("pye").Value + RS.Fields("rest") If RS.Fields("rest").Value = 0 Then RS.Fields("valider").Value = True PayedAmount = PayedAmount - Amount Else RS.Fields("pye").Value = RS.Fields("pye").Value + PayedAmount If RS.Fields("rest").Value = 0 Then RS.Fields("valider").Value = True PayedAmount = 0 End If RS.Update If PayedAmount = 0 Then Exit Do RS.MoveNext Loop Me.w.Requery MsgBox "Done" Set RS = Nothing End Sub
pye.accdb
-
Moosak's post in تنسيق خلية was marked as the answer
وعليكم السلام ورحمة الله وبركاته 🙂
يمكنك الاستعانة بهذا الجدول لعمل قناع إدخال بيانات حسب المطلوب :
وحسب سؤالك فأعتقد أن هذا هو القناع المناسب :
طبعا هذا القناع إما أن تضعه في خانة قناع الإدخال للحقل في النموذج :
أو أن تضعه في خانة قناع الإدخال للحقل في الجدول.
-
Moosak's post in سؤال حول عمل الواجهات الجذابة was marked as the answer
أهلا بك أخي أمين 🙂
(تم فصل الموضوع والإشارة للموضوع الأصلي للتنظيم ) 🙂
أولا : تم إصلاح الملف ..
ثانيا : بشرح مبسط الفكرة تعتمد على مسميات الأزرار ..
فالكود يتعرف على الأزرار الرئيسية والأزرار التابعة لها حسب تسمية الزر .. هكذا حسب الصورة التالية :
لذلك في حال الزيادة أو النقصان إنتبه لتسلسل التسميات حسب النمط المتبع 🙂
صفحة رئيسية مطورة (1).rar
-
Moosak's post in فتح الشاشة الرئيسية بعد شاشة الدخول was marked as the answer
تفضل 🙂
New Microsoft Access Database (1).accdb
-
Moosak's post in مساعدة في تعديل كود خاص بصفحة النموذج was marked as the answer
إليك الكود المعدل الذي سيسمح لك بإغلاق صفحات النموذج المحددة بدلاً من إغلاق جميع صفحات النماذج المفتوحة:
Private Sub Form_Current() Dim FormCount As Integer Dim I As Integer Dim FormNamesToClose As Variant ' أضف أسماء صفحات النموذج التي تريد إغلاقها في هذه المصفوفة FormNamesToClose = Array("Form1", "Form2", "Form3") FormCount = Forms.Count For I = FormCount - 1 To 0 Step -1 If IsInArray(Forms(I).Name, FormNamesToClose) Then DoCmd.Close acForm, Forms(I).Name End If Next I End Sub Private Function IsInArray(ByVal stringToSearch As String, ByVal arr As Variant) As Boolean Dim i As Integer For i = LBound(arr) To UBound(arr) If arr(i) = stringToSearch Then IsInArray = True Exit Function End If Next i IsInArray = False End Function هنا كيف يعمل الكود المعدل:
1- مصفوفة FormNamesToClose تحتوي على أسماء صفحات النماذج التي تريد إغلاقها عند فتح النموذج الحالي. يمكنك إضافة أو إزالة أسماء النماذج من هذه المصفوفة حسب الحاجة.
2- دالة Form_Current() تقوم بالتمرير على جميع صفحات النماذج المفتوحة باستخدام خاصية Forms.Count.
3- لكل صفحة نموذج، يتحقق ما إذا كان اسم النموذج موجودًا في مصفوفة FormNamesToClose باستخدام دالة المساعدة IsInArray().
4- إذا كان اسم النموذج موجودًا في مصفوفة FormNamesToClose، يتم استخدام بيان DoCmd.Close لإغلاق تلك صفحة النموذج.
دالة IsInArray() هي دالة مساعدة تتحقق مما إذا كان السلسلة المعطاة موجودة في المصفوفة المقدمة. إنها تُرجع True إذا تم العثور على السلسلة، وFalse خلاف ذلك.
بهذا الكود المعدل، يمكنك الآن تحديد صفحات النماذج التي تريد إغلاقها عند فتح النموذج الحالي، بدلاً من إغلاق جميع صفحات النماذج المفتوحة.
ما يحتاج أخبرك من وين جبت الجواب
-
Moosak's post in تصحيح كود فى اكسيس was marked as the answer
أخي @jo_2010 أنصحك باستخدام منسق الأكواد عند كتابة مواضيعك لكي لتسهل قراءة الكود 🙂 👈🏻
وبالنسبة للحل يمكنك عكس معناها بكتابتها بعدة صيغ هكذا :
If Not IsNull(Me.PNAME) Or Me.PNAME <> "" Then أو If IsNull(Me.PNAME) = False Or Me.PNAME <> vbNullString Then
-
Moosak's post in نقل كافة السجلات من جدول إلى جدول آخر ! was marked as the answer
وعليكم السلام ورحمة الله وبركاته 🙂
Database12.accdb