اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

السلام عليكم

معلش انا راسى مشغوله جدا بالعمل

مرفق مثال : المطلوب فقط عند الضغط على زر الحفظ ـ تحفظ البيانات المدخلة ولايمكن التعديل عليها        (طالما ضغطنا زر الحفظ)

                 عند الضغط على زر التعديل يمكننا ان نعدل على بيانات النموذج وبعد عملية التعديل نضغط حفظ لحفظ التعديل 

                 وعند الضغط على زر جديد  يفتح لنا سجل جديد ويمكننا ان ندخل بيانات فى النموذج ونضغط حفظ لحفظ البيانات ولا يمكن التعديد عليها

جزاكم الله خيرا

حفظ وتعديل.accdb

قام بنشر
33 دقائق مضت, AlwaZeeR said:

عليكم السلام ورحمة الله وبركاته

مرحبا بك الاستاذ الفاضل / @AlwaZeeR

تمام الله يفتح عيك ويرحم والديك فى الدنيا والاخرة

هذا جميل جدا جدا جدا جدا جدا      وبه افكار جميلة جدا

هذا كان مثال مصغر ولكن فى البرنامج الاصلى يوجد مربع list box كما تراه فى المرفقات

وهذا الليست بوكس الغرض منه ان يفلتر النموذج على  كود الصنف عند الاختيار من الليست بوكس وانا لا اعرف كيف يفلتر فى هذا المثال 

وعند التطبيق فى برنامجى توقف عمل الليست بوكس

اسف واعذرنى كما ادعو حضرتك لمشاهدة المرفق

جزاك الله خير 

حفظ وتعديل.accdb

اسف لقد اخطأت فى المرفق 

حفظ وتعديل (1).accdb

قام بنشر
1 ساعه مضت, AlwaZeeR said:

لاحظ اننا منعنا التعديل الا بعد الضغط على تعديل

طب ايه رايك فى هذا الحل فهو مأخوذ من اكواد حضرتك 

حفظ وتعديل (1) (1).accdb

قام بنشر

تقصد بالحل: انه عند الضغط على القائمة يبقى التعديل مغلقا؟ وعند نقل المؤشر الى مربع النص يصبح مفعل؟

اذا هذا الامر يماشى مع تقوم به فلا بأس

يمكنك جعل الاكواد في وحدة نمطية واستخدامها اكثر من مرة بدل تكرارها

 

قام بنشر
منذ ساعه, AlwaZeeR said:

قصد بالحل: انه عند الضغط على القائمة يبقى التعديل مغلقا؟ وعند نقل المؤشر الى مربع النص يصبح مفعل؟

نعم اقصد ذلك

ياريت يااستاذ تعمل لى الوحدة النمطية هذا اكون شاكرا لحضرتك

  • Haha 1
قام بنشر
منذ ساعه, ابو جودي said:

والله يا دكتور انا كنت بأجهز فكرة

اهلا بك معلمى واستاذى الفاضل 

ماشى ياباشمهندس انا معاك ومع افكارك الجميلة كلها عبقرية وتنفعنى كثيرا

جزاك الله خير

قام بنشر

اتفضل يا دكتور تدلل

قم بعمل موديول جديد واعطه مصلا الاسم : basFormControlStatus
الاكواد داخل الموديول
 

Option Compare Database
Option Explicit

' Description: This module contains functions related to managing record statuses in forms.

Public Enum RecordStatusEnum
    LockedStatus
    NewRecordStatus
    EditRecordStatus
    CurrentRecordStatus
    SaveRecordStatus
End Enum
' Enum: RecordStatusEnum
' Description: Defines possible control statuses for record status.


' Description: This module contains functions related to managing record statuses in forms.

Public Sub SetRecordStatus(frm As Form, status As RecordStatusEnum)
    ' Description: Sets the status of records in a form.

    Dim ctl As Control
    
    ' Disable all controls by default
    For Each ctl In frm.Controls
        If IsEditableControl(ctl) Then
            ctl.Enabled = False
        End If
    Next ctl

    ' Enable or disable controls based on the specified status
    Select Case status
        Case NewRecordStatus
            ' Enable editable controls and move to a new record if applicable
            For Each ctl In frm.Controls
                If IsEditableControl(ctl) Then
                    ctl.Enabled = True
                End If
            Next ctl
            ' If there are existing records, move to a new record
            If frm.Recordset.RecordCount > 0 Then
                DoCmd.GoToRecord , , acNewRec
            End If

        Case CurrentRecordStatus
            ' If no records exist or if it's a new record, enable editable controls;
            ' otherwise, save the record and disable editable controls.
            If frm.Recordset.RecordCount = 0 Or frm.NewRecord Then
                For Each ctl In frm.Controls
                    If IsEditableControl(ctl) Then
                        ctl.Enabled = True
                    End If
                Next ctl
            Else
                DoCmd.RunCommand acCmdSaveRecord
            End If

        Case EditRecordStatus
            ' Enable editable controls for editing
            For Each ctl In frm.Controls
                If IsEditableControl(ctl) Then
                    ctl.Enabled = True
                End If
            Next ctl

        Case SaveRecordStatus
            ' Save the record and disable editable controls
            DoCmd.RunCommand acCmdSaveRecord
    End Select
End Sub

Private Function IsEditableControl(ctrl As Control) As Boolean
    ' Description: Determines if a control is editable.

    Select Case ctrl.ControlType
        Case acTextBox, acComboBox, acCheckBox, acOptionGroup, acOptionButton, acToggleButton
            IsEditableControl = True
        Case Else
            IsEditableControl = False
    End Select
End Function

 

طريفة الاستدعاء :

تبعا لوظيفة كل زر باسهل ما يكون
 

Private Sub Form_Load()
    ' Set the form status to Locked when the form is loaded
    SetRecordStatus Me, LockedStatus
End Sub

Private Sub btnAddNew_Click()
    ' Set the form status to NewRecord when the New button is clicked
    SetRecordStatus Me, NewRecordStatus
End Sub

Private Sub btnSave_Click()
    ' Save the current record and set the form status to Locked when the Save button is clicked
    SetRecordStatus Me, SaveRecordStatus
End Sub

Private Sub BtnEdit_Click()
    ' Set the form status to EditRecord when the Edit button is clicked
    SetRecordStatus Me, EditRecordStatus
End Sub



 

المرفق 

 

حفظ وتعديل.accdb

قام بنشر
2 ساعات مضت, ابو جودي said:

تبعا لوظيفة كل زر باسهل ما يكون

واللة يابشمهندس ابدعت وجزاك الله كل خير وبارك الله فى اسرتك

ولى بعض الملاحظات الصغيرة وهذا لا يقلل من عبقرية الموديول

اولا عند الضغط على الليست بوكس لا يظهر على اليسار اسم هذا الصنف وبياناته

ثانيا : ياريت عند فتح النموذج لا يكون كل الحقول غير ممكنة (بضم الميم) يعنى لونها قاتم 

اشكرك استاذى ومعلمى انا ياما دللت وانت المستجيب

كل الاحترام والتقدير

قام بنشر

جزاكم الله خيرا يا دكتور على دعواتكم الطيبة 

اسال الله تعالى ان يرزقكم فضلها اضعافا مضاعفة انتم ومن تحبون وكل المسلمون والمؤمنون

3 دقائق مضت, الحلبي said:

اولا عند الضغط على الليست بوكس لا يظهر على اليسار اسم هذا الصنف وبياناته

يا دكتور الليست بوكس ده انا من قام باضافته للتأمد فقط  فهو بدون اى اكواد

لان حضرتك طلبت منع التعديل ولكن تفعيل الليست بوكس 

5 دقائق مضت, الحلبي said:

ثانيا : ياريت عند فتح النموذج لا يكون كل الحقول غير ممكنة (بضم الميم) يعنى لونها قاتم 

يعنى انت عاوز عند قتح النموذج يكون فى تعديل عادى 

واللا بس اللون اللى مزعلك علشان افهم 

وحضرتك تأمر يا دكتور س تحملنى فى نفس الوقت انت عارف انى صعيدى ومخى مقفل فواحدة واحدة على الله يرضى عليك

 

قام بنشر
11 ساعات مضت, ابو جودي said:

وحضرتك تأمر يا دكتور س تحملنى

الله يرضى عنك يابشمهندس انا عملت عند الضغط على الليست بوكس تظهر بيانات الصنف على اليسار

بالنسبة للون الحقول خلاص انا تقبلتها بنفس اللون عشان يكمل الكود

واخيرا لايسعنى الا ان اقول لك بارك الله فى علمك وجعلك خير مساعد لنا 

خلى بالك انا صعيدى بحت والصعايدة مخهم واسع ومدرك لمظاهر الحياة بس هى العصبية شوية عندهم

جزاك الله كل خير

قام بنشر
2 دقائق مضت, الحلبي said:

انا عملت عند الضغط على الليست بوكس تظهر بيانات الصنف على اليسار

ممكن المرفق من فضلك علشان اقدر افهم بالليست بوكس بتاعك بالاكواد الاصلية
وانا ان شاء الله هاضبط لك كل شئ يرضيك بامر الله

 

قام بنشر
5 دقائق مضت, ابو جودي said:

ممكن المرفق من فضلك علشان اقدر افهم بالليست بوكس بتاعك بالاكواد الاصلية

استاذى الفاضل المرفق موجود عند حضرتك فى خامس مشاركة لى والاستاذ / الوزير اتم عملية الفلترة للتسكت بوكس

وانا قمت ببعض التعلايلات عشا النموذج بعد عملية الحفظ لايقبل التعديل وبعد الضغط على زر التعديل نتمكن من التعديل على النموذج

والمرفق هذا مصغر جدا لانى طبعا النموذج الاصلى كبير وبه كثير من الجداول والاستعلامات والازرار

اشكرك على الاهتمام والحرض على تلاميذك الصغار

قام بنشر

السلام عليكم

مشكلتك الحقيقية في الاكواد والاجراء الذي يتم عند تحميل النموذج

اليك حل بسيط  ومحكم

فقط التعامل يتم مع الحقول وليس مع النموذج

اذا الحقول كثيرة جدا لديك .. يمكن التعامل معها بعمل لوب 

حفظ وتعديل4.rar

  • Like 1
قام بنشر (معدل)
19 دقائق مضت, ابوخليل said:

ذا الحقول كثيرة جدا لديك .. يمكن التعامل معها بعمل لوب 

ياسلام عليك يا معملنا واستادنا الجليل ابو خليل

فعلا هذا حل بسيط ومحكم وجميل جدا  وكمان عند التعديل يلزم ادخال كلمة مرور     الله الله عليك سلمت يمنيك

نعم الحقول كثيرة عندى فكيف يتم عمل اللوب واذا كانت المسألة صعبه فأنى اكتفى بذلك

كل الاخترام لشخكم الكريم وجعلكم دائما خير مساعدا لنا

 

تم تعديل بواسطه الحلبي
قام بنشر

تفضل

Dim intControlType As Integer
For Each ctl In Me.Controls
    intControlType = ctl.ControlType
    If (intControlType = acCheckBox) Or (intControlType = acComboBox) Or (intControlType = acTextBox) Then
            If isEditing = False Then
                ctl.Locked = False
            Else
                ctl.Locked = True
            End If
    End If
Next ctl

 

حفظ وتعديل5.rar

قام بنشر

واعتذر عن التأخير 
النور كان قاطع :')

بعد اذن والدى الحبيب و معلمي الجليل و واستاذى القدير الاستاذ @ابوخليل :fff: اكمل ما بدأتـه وأضع المرفق الاتي

تدلل يا دكتور  @الحلبي :fff:
 

و يا دكتور الشرح لكل تفصيله بعد التجربة

 

حفظ وتعديل (2).accdb

قام بنشر
20 دقائق مضت, ابو جودي said:

و يا دكتور الشرح لكل تفصيله بعد التجربة

حبيبى ابو جودي 

ايه ده تنسيق ولا اروع تنسيق جميل جدا انا مش مصدق كل هذه الديكورات 

نعم نعم نعم تسليم يمنيك وربنا يبارك لك فى ابناءك وتشوفهم يارب دكاترة

يمكن اكون فهمت شوية حضرتك انت قمت بتجزئ الوديول الى قسمين وعند التنفيذ وضعت الكود الخاص به

حاجة جميلة بجد باشمندسنا الله ينور عليك بجد انا جربت وشوفت حاجات وعبقرية مفيش كده

 

26 دقائق مضت, ابو جودي said:

و يا دكتور الشرح لكل تفصيله بعد التجربة

ان قدرت وكان لديك متسع من الوقت تشرح لى باختصار ما تم عمله لانى تقريبا حسب علمى انا فمت

قام بنشر

دكتور انا قمت بإضافة من تلقاء نفسي

بما انك تريد اغلاق التعديل لابد من انك تريد حماية البيانات من التعديل عن طريق الخطأ 
وطبعا زر التعديل لن يقوم بهذه الوظيفة ان تم النقر عليه عن طريق الخطأ ومن اجل ذلك 

اضفت لكم هدية صغيرة والتي أتمني ان تلقي استحسانكم ورضاكم :biggrin2:

وتم التغلب على لون الحقول :yes:

 

6 دقائق مضت, الحلبي said:

ايه ده تنسيق ولا اروع تنسيق

بل انتم الاجمل والاروع

6 دقائق مضت, الحلبي said:

وربنا يبارك لك فى ابناءك وتشوفهم يارب دكاترة

جزاكم الله خيـرا على دعواتكم الطيبة 

6 دقائق مضت, الحلبي said:

انا جربت وشوفت حاجات وعبقرية

اهم شئ هل المرفق الان يلبى كل احتياجاتكم وتطلعاتكم كما اردتم يا دكتور حتى اقوم بالشرخ 

ام هناك فى نفسك حاجة ما تريد اضافتها او تعديلها  ؟!

 

قام بنشر
16 دقائق مضت, ابو جودي said:

م هناك فى نفسك حاجة ما تريد اضافتها او تعديلها  ؟!

انا والله العظيم نفسى ربنا يجزيك كل خير ومش عارف اقولك ايه على حرصك الشديد بان يكون العمل كامل

لا يابشمهندس انا منتظر الشرح

  • Thanks 1
قام بنشر

على بركة الله وبسم الله

ولكن انا سوف اشرح ما تم عمله طبقا للمرفق وبعد ذلك سوف اخبركم برأى فى الاخر 

اولا الموديول باسم : basFormControlStatus

الاكواد بداخلة كالتالى
 

Option Compare Database
Option Explicit

' Enum: RecordStatusEnum
' Description: Defines possible control statuses for record status.
Public Enum RecordStatusEnum
    LockedStatus
    NewRecordStatus
    EditRecordStatus
    CurrentRecordStatus
    SaveRecordStatus
End Enum

' Sub: SetRecordStatus
' Description: Sets the status of records in a form.
Public Sub SetRecordStatus(frm As Form, status As RecordStatusEnum)

    ' Disable all editable controls by default
    SetControlsEnabled frm, False
    
    ' Enable or disable controls based on the specified status
    Select Case status
        Case NewRecordStatus
            ' Enable editable controls and move to a new record if applicable
            SetControlsEnabled frm, True
            If frm.Recordset.RecordCount > 0 Then
                DoCmd.GoToRecord , , acNewRec
            End If

        Case CurrentRecordStatus
            ' Enable editable controls if there are no records or it's a new record
            If frm.Recordset.RecordCount = 0 Or frm.NewRecord Then
                SetControlsEnabled frm, True
            Else
                DoCmd.RunCommand acCmdSaveRecord
            End If

        Case EditRecordStatus
            ' Enable editable controls for editing
            SetControlsEnabled frm, True

        Case SaveRecordStatus
            ' Save the record and disable editable controls
            DoCmd.RunCommand acCmdSaveRecord
    End Select
End Sub

' Function: SetControlsEnabled
' Description: Enables or disables all editable controls in the form.
Private Sub SetControlsEnabled(frm As Form, isEnabled As Boolean)
    Dim control As control
    For Each control In frm.Controls
        If IsEditableControl(control) Then
            control.Enabled = isEnabled
            On Error Resume Next ' Ignore errors if control doesn't support Locked property
            If isEnabled Then
                control.Locked = False
            Else
                control.Locked = True
            End If
            On Error GoTo 0 ' Reset error handling
        End If
    Next control
End Sub

' Function: IsEditableControl
' Description: Determines if a control is editable.
Private Function IsEditableControl(ctrl As control) As Boolean
    Select Case ctrl.ControlType
        Case acTextBox, acComboBox, acCheckBox, acOptionGroup, acOptionButton, acToggleButton
            IsEditableControl = True
        Case Else
            IsEditableControl = False
    End Select
End Function

Option Compare Database: تحدد كيفية مقارنة السلاسل النصية. في هذا الحالة، المقارنة ستكون باستخدام إعدادات قاعدة البيانات
Option Explicit: تفرض التصريح الصريح عن المتغيرات قبل استخدامها، مما يساعد على تجنب الأخطاء النحوية في الكود

تعريف التعداد (Enum)

RecordStatusEnum: تعداد يمثل الحالات المختلفة لسجلات النموذج
الحالات هي:
LockedStatus: السجل مقفل ولا يمكن تحريره
NewRecordStatus: إضافة سجل جديد
EditRecordStatus: تعديل سجل موجود
CurrentRecordStatus: حالة السجل الحالي، والتي قد تكون جديدة أو قائمة
SaveRecordStatus: حفظ السجل
 

ببساطة وبدون تعقيد تمثل الاختيارات المتاحة للمصمم اثناء استدعاء الدالة وكأنها مربع تحرير وسرد

الدالة الاولى إعداد حالة السجل (SetRecordStatus)

SetRecordStatus: دالة لضبط حالة السجلات في النموذج تقوم بتعطيل جميع عناصر التحكم القابلة للتحرير افتراضيا ثم تمكن أو تعطل عناصر التحكم بناء على الحالة المحددة
وفى رأس الدالة يتم التعامل مع براميترات من خلال المتغيرات الاتية
 frm As Form : لتعريف الدالة عند استدعائها على النموذج الذى سوق يتم التعامل من خلاله
status As RecordStatusEnum حالة السجلات بناء على الحالات التى تم كتابتها فى التعداد Enum 

تم استدعاء دالة فرعية نأتى اليها لاحقا  SetControlsEnabled frm, False

يتم التعامل مع الحلات كما نريد من خلال الاكواد  حسب الرغبة وهنا كانت الرغبة فى عمل الاتى لكل حالة من خلال Select Case

NewRecordStatus:
تمكين عناصر التحكم القابلة للتحرير
الانتقال إلى سجل جديد إذا كانت هناك سجلات موجودة

CurrentRecordStatus:
تمكين عناصر التحكم إذا لم يكن هناك سجلات أو إذا كان السجل جديدا 
أو حفظ السجل إذا كان موجودا

EditRecordStatus:
تمكين عناصر التحكم لتحرير السجل

SaveRecordStatus:
حفظ السجل وتعطيل عناصر التحكم القابلة للتحرير


----------------------------------------
الان أتى للدالة SetControlsEnabled  والتى تم استدعائها فى الدالة السابقة
وظيفتها تمكين أو تعطيل جميع عناصر التحكم القابلة للتحرير في النموذج
فى هذه الدالة تم عمل حلقة تكرارية للدوران على العناصر لتأمينها ان لم تكن مأمنه
ونلاحظ انها تعتمد على دالة اخرى 
IsEditableControl
حيث تقوم بالدوران على كل عنصر تحكم في النموذج وإذا كان عنصر التحكم قابلا للتحرير (بناء على نتيجة دالة IsEditableControl) فإنه يتم تمكينه أو تعطيله حسب الحالة المحددة

----------------------------------------
وهنا ننتقل الى دالة تحديد عناصر التحكم القابلة للتحرير (IsEditableControl)
وهى دالة تقوم  بتحديد ما إذا كان عنصر التحكم قابلا للتحرير بناء على نوعه فأنها تعيد القيمة True إذا كان نوع عنصر التحكم هو
TextBox أو ComboBox أو CheckBox أو OptionGroup أو OptionButton أو ToggleButton
وتعيد False لبقية الأنواع الأخرى

طبعا تم اختيار العناصر فقط TextBox أو ComboBox أو CheckBox أو OptionGroup أو OptionButton أو ToggleButton دون غيرها لانها هى العناصر المستخدمة فى ادخال البيانات افتراضيا
ويمكن للمصمم طبعا تغير ما يريرد وفق اهوائه

الان طريقة الاستدعاء
SetRecordStatus ثم me لتعريفها على النموذج الحالى , ثم اختيار الحالة وهنا تظهر روعة التعداد (Enum) حيث ان القيم الموجودة فيه تظهر ليتمكن المبرمج بسهولة من اختيار الحالة

 

-------------

ومن تلقاء نفسي قمت باضافة الوحدة النمطية باسم : basPasswordPrompt
واكواد هذه الوحدة 

Option Compare Database
Option Explicit

Public strPasswordPrompt As String
Public boolPasswordPrompt As Boolean

' Enum for different password statuses
Public Enum EnumPassword
    PasswordNull
    PasswordIncorrect
    PasswordCancelled
    Confirmation
    UnsupportedAction
End Enum

' Enum for different actions that can be executed
Public Enum RequiredAction
    OpenForm
    OpenQuery
    OpenReport
    PrintReport
    DeleteRecords
    RunSQL
    CallFunction
    CallFunctionByForm ' New case for calling functions from the current form
End Enum

' Subroutine to execute actions based on input parameters
' Parameters:
'   frm - Reference to the current form
'   actionType - Type of action to be executed
'   itemName - Name of the item (form, query, report, function) to be executed
'   CORRECT_PASSWORD - The correct password to validate (optional)
Public Sub ExecuteAction(ByVal actionType As RequiredAction, ByVal itemName As String, Optional ByVal CORRECT_PASSWORD As String = "", Optional ByVal frm As Access.Form)
    
    ' Loop until password prompt is resolved
    Do
        ' Open password prompt form
        DoCmd.OpenForm "frmPasswordPrompt", , , , , acDialog
        
        ' Check if password prompt is entered
        ' Determine action based on password prompt
        Select Case True
            Case boolPasswordPrompt
                Select Case True
                    Case Nz(strPasswordPrompt, "") = ""
                        MsgPasswordPrompt (PasswordNull)
                    Case strPasswordPrompt <> CORRECT_PASSWORD
                        MsgPasswordPrompt (PasswordIncorrect)
                    Case Else
                        ' Perform selected action based on the action type
                        Select Case actionType
                            Case RequiredAction.OpenForm
                                DoCmd.OpenForm itemName
                            Case RequiredAction.OpenQuery
                                DoCmd.OpenQuery itemName
                            Case RequiredAction.OpenReport
                                DoCmd.OpenReport itemName, acViewNormal
                            Case RequiredAction.PrintReport
                                DoCmd.OpenReport itemName, acViewNormal ' Open report in preview mode
                                DoCmd.PrintOut ' Print report
                            Case RequiredAction.DeleteRecords
                                DoCmd.SetWarnings False
                                DoCmd.RunSQL "DELETE * FROM " & itemName
                                DoCmd.SetWarnings True
                            Case RequiredAction.RunSQL
                                DoCmd.SetWarnings False
                                DoCmd.RunSQL itemName
                                DoCmd.SetWarnings True
                            Case RequiredAction.CallFunction
                                ' Call the function specified in itemName using Application.Run
                                Application.Run itemName
                            Case RequiredAction.CallFunctionByForm
                                ' Call the function specified in itemName using CallByName
                                CallByName frm, itemName, VbMethod
                            Case Else
                                MsgPasswordPrompt (UnsupportedAction)
                        End Select
                        Exit Do
                End Select
            Case Else
                MsgPasswordPrompt (PasswordCancelled)
                Exit Do
        End Select
    Loop

    Exit Sub

ErrorHandler:
    ' Display error message if any
    MsgBox "Error: " & Err.Number & vbCrLf & "Description: " & Err.Description, vbCritical
    Debug.Print Err.Number & vbCrLf & "Description: " & Err.Description
    On Error GoTo 0
End Sub

'' Function to show a message based on password prompt status
'' Parameters:
''   status - The password status to display the message for
'Public Sub MsgPasswordPrompt(status As EnumPassword)
'    Select Case status
'        Case PasswordNull
'            MsgBox "Password cannot be empty.", vbExclamation
'        Case PasswordIncorrect
'            MsgBox "Incorrect password.", vbExclamation
'        Case PasswordCancelled
'            MsgBox "Password entry cancelled.", vbInformation
'        Case Confirmation
'            MsgBox "Password confirmed.", vbInformation
'        Case UnsupportedAction
'            MsgBox "Unsupported action type.", vbExclamation
'    End Select
'End Sub


' Function to display password prompt messages based on status
Sub MsgPasswordPrompt(Optional ByVal ConfirmationStatus As EnumPassword = Confirmation)
       
  ' Password prompt messages
  
  Dim MSG_ENTER_PASSWORD As String
  ' "Please enter your password."
  MSG_ENTER_PASSWORD = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1580") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1573") & ChrW("1583") & ChrW("1582") & ChrW("1575") & ChrW("1604") & ChrW("32") & ChrW("1603") & ChrW("1604") & ChrW("1605") & ChrW("1577") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1587") & ChrW("1585") & ChrW("32") & ChrW("1604") & ChrW("1604") & ChrW("1605") & ChrW("1578") & ChrW("1575") & ChrW("1576") & ChrW("1593") & ChrW("1577")

  Dim MSG_INCORRECT_PASSWORD As String
  ' "Incorrect password. Please try again."
  MSG_INCORRECT_PASSWORD = ChrW("1603") & ChrW("1604") & ChrW("1605") & ChrW("1577") & ChrW("32") & ChrW("1587") & ChrW("1585") & ChrW("32") & ChrW("1582") & ChrW("1575") & ChrW("1591") & ChrW("1574") & ChrW("1577") & ChrW("46") & ChrW("32") & ChrW("1578") & ChrW("1605") & ChrW("32") & ChrW("1571") & ChrW("1604") & ChrW("1594") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1573") & ChrW("1580") & ChrW("1585") & ChrW("1575") & ChrW("1569")

  Dim MSG_OPERATION_CANCELED As String
  ' "Operation canceled"
  MSG_OPERATION_CANCELED = ChrW("1578") & ChrW("1605") & ChrW("32") & ChrW("1573") & ChrW("1604") & ChrW("1594") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1573") & ChrW("1580") & ChrW("1585") & ChrW("1575") & ChrW("1569")

 Dim UNSUPPORTED_ACTION As String
 ' "Unsupported action type"
 UNSUPPORTED_ACTION = ChrW("1573") & ChrW("1580") & ChrW("1585") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1605") & ChrW("1583") & ChrW("1593") & ChrW("1608") & ChrW("1605")

  ' "Password Prompt"
  Dim MSG_TITLE As String
  MSG_TITLE = ChrW("1605") & ChrW("1591") & ChrW("1575") & ChrW("1604") & ChrW("1576") & ChrW("1577") & ChrW("32") & ChrW("1603") & ChrW("1604") & ChrW("1605") & ChrW("1577") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1587") & ChrW("1585")
    
    ' Display appropriate message based on status
    Select Case Nz(ConfirmationStatus, "")
      Case Is = "": MsgBox MSG_ENTER_PASSWORD, vbExclamation, MSG_TITLE
      Case EnumPassword.PasswordNull: MsgBox MSG_ENTER_PASSWORD, vbMsgBoxRight + vbExclamation, MSG_TITLE
      Case EnumPassword.PasswordIncorrect: MsgBox MSG_INCORRECT_PASSWORD, vbMsgBoxRight + vbCritical, MSG_TITLE
      Case EnumPassword.PasswordCancelled: MsgBox MSG_OPERATION_CANCELED, vbMsgBoxRight, MSG_TITLE
      Case EnumPassword.UnsupportedAction: MsgBox UNSUPPORTED_ACTION, vbMsgBoxRight + vbExclamation, MSG_TITLE
    End Select
End Sub

تعريف المتغ
رات العامة

strPasswordPrompt: سلسلة نصية لتخزين كلمة المرور المدخلة
boolPasswordPrompt: متغير منطقي (Boolean) لتحديد ما إذا تم إدخال كلمة المرور أم لا

تعريف التعدادات (Enums)
اولا :

Enum Password: تعداد يمثل الحالات المختلفة لكلمة المرور
PasswordNull: كلمة المرور غير مدخلة
PasswordIncorrect: كلمة المرور غير صحيحة
PasswordCancelled: تم إلغاء إدخال كلمة المرور
Confirmation: تأكيد كلمة المرور
UnsupportedAction: الإجراء غير مدعوم

ثانيا :

Enum RequiredAction: تعداد يمثل الإجراءات المختلفة التي يمكن تنفيذها
OpenForm: فتح نموذج
OpenQuery: فتح استعلام
OpenReport: فتح تقرير
PrintReport: طباعة تقرير
DeleteRecords: حذف سجلات
RunSQL: تنفيذ استعلام SQL
CallFunction: استدعاء دالة عامة من موديول ( وحدة نمطية )
CallFunctionByForm: استدعاء دالة من النموذج الحالي

الدالة الرئيسية

تنفيذ الإجراءا (ExecuteAction)
هى دالة تقوم بتنفيذ الإجراءات بناء على نوع الإجراء طبقا للتعداد ( Enum RequiredAction ) المدخل وكلمة المرور الصحيحة
تقوم بفتح نموذج إدخال كلمة المرور (frmPasswordPrompt)

بناء على إدخال كلمة المرور يتم التحقق من كلمة المرور المدخلة طبقا للتعداد ( Enum EnumPassword )
إذا كانت الكلمة فارغة تعرض رسالة بأن كلمة المرور غير مدخلة
إذا كانت الكلمة غير صحيحة تعرض رسالة بأن كلمة المرور غير صحيحة
إذا كانت الكلمة صحيحة يتم تنفيذ الإجراء المحدد بناء على نوعه
في حالة أي خطأ تعرض رسالة خطأ
 نلاخظ انه تم استخدام وظيفية الاختيار  Optional ByVal CORRECT_PASSWORD As String = "" فى راس الدالة 
وذلك حتى لا يتم استخدام كلمة مرور واحدة ووحيدة وثابته 

بذلك يكون هناك مرونة فى استخدام كلمات مرور مختلفة 

والاستدعاء تتم بالطريقة التالية :
1. فتح نموذج:

ExecuteAction RequiredAction.OpenForm, "FormName", "YourPassword"

2. فتح استعلام:

ExecuteAction RequiredAction.OpenQuery, "QueryName", "YourPassword"

3. فتح تقرير:

ExecuteAction RequiredAction.OpenReport, "ReportName", "YourPassword"

4. طباعة تقرير:

ExecuteAction RequiredAction.PrintReport, "ReportName", "YourPassword"

5. حذف سجلات:

ExecuteAction RequiredAction.DeleteRecords, "TableName", "YourPassword"

6. تنفيذ استعلام SQL:

ExecuteAction RequiredAction.RunSQL, "SQLStatement", "YourPassword"

7. استدعاء دالة عامة من وحدة نمطية:
استبدل "FunctionName" باسم الدالة التي تريد استدعاءها

ExecuteAction RequiredAction.CallFunction, "FunctionName", "YourPassword"

8. استدعاء دالة او حدث من النموذج الحالي:
استبدل "FunctionNameInForm" باسم الدالة التي تريد استدعاءها

ExecuteAction RequiredAction.CallFunctionByForm, "FunctionNameInForm", "YourPassword", Me

 

وطبعا مع جميع ما سبق  

استبدل  "YourPassword" بكلمة المرور التى تريد

ممكن مثلا تستدعى الدالة لاكثر من نمورذج بالشكل التالى 
 

ExecuteAction RequiredAction.OpenForm, "frmA", "123"
ExecuteAction RequiredAction.OpenForm, "frmB", "000"
ExecuteAction RequiredAction.OpenForm, "frmC", "789"

من خلال دالة واحدة تستطيع استكمال اجراء من خلال كلمات مرور مختلفة وليس كلمة واحدة

مثل قتح اكثر من نموذج وكل واحد يحتاج الى كلمة مرور غير كلمة المرور المستخدمه مع غيره 


ملحوظة ثغنونه اثناء الشرح قمت بتعديل دالة كلمة المرور 

قام بنشر
منذ ساعه, ابو جودي said:

ملحوظة ثغنونه اثناء الشرح قمت بتعديل دالة كلمة المرور 

الله عليك يااستاذ محمد عصام ونعم الشرح والتوضيح  وسوف يأخذ فى الاعتبار الملحوظة الثغنونةـ وبهذا الشرح المتقن لا يكون عندى اى عذر فى اطبق هذا الشرح على جميع اعمالى

واسمح لى استاذ محمد (فكرتنى بايام المذاكرة) هذ الشرح يحتاج منى وقفة ودراسة لهذا الشرح وكما تعودت لا اترك كلمة والا قد فهمتها واذا توقف معى شئ سوف ارجع لك

الان اصبح لدى ثلاث حلول حل الاستاذ @AlwaZeeR  وحل شيخنا الجليل @ابوخليل وحل باشمهندسنا @ابو جودي

جزاكم الله خيرا جميعا وزادكم الله علما نافعا واشكركم من كل قلبى 

واسمحوا لى اشكر الاستاذ/ محمد عصام ابو جودى على تعبه وهذا الشرح الذى سوف ياخذ منى وقت كبير

بارك الله فيكم جميعا

 

 

  • Thanks 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information