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

رساله عند محاولة تغيير قيمة حقل في نموذج


كوماندير

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

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

اعزائي الكرام :

لدي نموذج مفرد لتكويد اصناف معينة فيه المعطيات التالية :

يحتوي على مجموعة مربعات نص منضمه

يحتوي على مجموعة من مربعات التحرير والسرد المنضمة ايضا

يحتوي على زر (نعم / لا )

يحتوي على مربع نص غير منظم

يحتوي على مربع قائمة غير منضم .

المطلوب هو : عند تغيير قيمة اي حقل ( منضم فقط ) ان تظهر للمستخدم رسالة تفيده بتغيير قيمة  الحقل ( واعلامه بأسم الحقل ) وتخييره هل يود التغيير ام لا .

طبعا لا اريد هذه الرسالة ان تظهر عندما يكون هناك سجلا جديدا .

طبعا ياريت لو كان الكود واحد للنموذج ككل . اي لايكون كود لكل حقل مستقلا .

هل هذا ممكنا وكيف ؟

 

رابط هذا التعليق
شارك

وعليكم السلام:smile:

 

تفضل:smile:

ضع الكود في حدث النموذج "قبل التحديث":

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim ctl As Access.Control
    
    jLock = 0
    jItems = ""
    
    'Don't go through New Records
    If Me.NewRecord = False Then
        'go through Form controls
        For Each ctl In Me.Controls
            'only Textboxes
            If ctl.ControlType = acTextBox Then
                ctl.SetFocus
                x = Nz(ctl.Text, "")
                'check if the value has been changed
                If Val(x) <> Val(ctl.OldValue) Then
                    
                    jLock = 1
                    jItems = "The Field: " & ctl.Name & vbCrLf & _
                             "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _
                             "The New value : " & ctl.OldValue & vbCrLf & _
                             "------------------------------------" & vbCrLf & jItems
                End If  'Nz
                    
            End If  'ControlType
        Next
    
    'the confirmation
        If jLock = 1 Then
                    
            jItems = jItems & vbCrLf & vbCrLf & _
                     "Do you want to Accept Changes?"
                           
            Style = vbYesNo + vbCritical + vbDefaultButton2
                    
            Response = MsgBox(jItems, Style, Title, Help, Ctxt)
            If Response = vbYes Then
                DoCmd.Save
            Else
                Cancel = True
                Me.Undo
            End If
                    
        End If  'jLock
        
    End If  'NewRecord

End Sub

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

وعليكم السلام:smile:

 

تفضل:smile:

ضع الكود في حدث النموذج "قبل التحديث":

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim ctl As Access.Control
    dim jLock as integer
	dim jItems as string, x, Style, Response       
    
    jLock = 0
    jItems = ""
    
    'Don't go through New Records
    If Me.NewRecord = False Then
        'go through Form controls
        For Each ctl In Me.Controls
            'only Textboxes
            If ctl.ControlType = acTextBox Then
                ctl.SetFocus
                x = Nz(ctl.Text, "")
                'check if the value has been changed
                If Val(x) <> Val(ctl.OldValue) Then
                    
                    jLock = 1
                    jItems = "The Field: " & ctl.Name & vbCrLf & _
                             "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _
                             "The New value : " & ctl.OldValue & vbCrLf & _
                             "------------------------------------" & vbCrLf & jItems
                End If  'Nz
                    
            End If  'ControlType
        Next
    
    'the confirmation
        If jLock = 1 Then
                    
            jItems = jItems & vbCrLf & vbCrLf & _
                     "Do you want to Accept Changes?"
                           
            Style = vbYesNo + vbCritical + vbDefaultButton2
                    
            Response = MsgBox(jItems, Style, Title, Help, Ctxt)
            If Response = vbYes Then
                DoCmd.Save
            Else
                Cancel = True
                Me.Undo
            End If
                    
        End If  'jLock
        
    End If  'NewRecord

End Sub

 

جعفر

رابط هذا التعليق
شارك

منذ ساعه, jjafferr said:

وعليكم السلام:smile:

 

تفضل:smile:

ضع الكود في حدث النموذج "قبل التحديث":


Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim ctl As Access.Control
    dim jLock as integer
	dim jItems as string, x, Style, Response       
    
    jLock = 0
    jItems = ""
    
    'Don't go through New Records
    If Me.NewRecord = False Then
        'go through Form controls
        For Each ctl In Me.Controls
            'only Textboxes
            If ctl.ControlType = acTextBox Then
                ctl.SetFocus
                x = Nz(ctl.Text, "")
                'check if the value has been changed
                If Val(x) <> Val(ctl.OldValue) Then
                    
                    jLock = 1
                    jItems = "The Field: " & ctl.Name & vbCrLf & _
                             "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _
                             "The New value : " & ctl.OldValue & vbCrLf & _
                             "------------------------------------" & vbCrLf & jItems
                End If  'Nz
                    
            End If  'ControlType
        Next
    
    'the confirmation
        If jLock = 1 Then
                    
            jItems = jItems & vbCrLf & vbCrLf & _
                     "Do you want to Accept Changes?"
                           
            Style = vbYesNo + vbCritical + vbDefaultButton2
                    
            Response = MsgBox(jItems, Style, Title, Help, Ctxt)
            If Response = vbYes Then
                DoCmd.Save
            Else
                Cancel = True
                Me.Undo
            End If
                    
        End If  'jLock
        
    End If  'NewRecord

End Sub

 

جعفر

عند استخدام الكود اعطى الرسالة التالية :

run time error 94

 

invalid use of null

fe.jpg.2509b92f9a193e2328afbcc20affb830.jpg

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

اي سطر؟

 

 

وإلا اقول لك ، واللي يرحم والديك ، بدل الكر والفر ، ارفق هذه الجزئية من البرنامج مع شوية بيانات ،

واخبرني طريقة الحصول على هذا الخطأ.

 

جعفر

رابط هذا التعليق
شارك

20 دقائق مضت, jjafferr said:

اي سطر؟

 

 

وإلا اقول لك ، واللي يرحم والديك ، بدل الكر والفر ، ارفق هذه الجزئية من البرنامج مع شوية بيانات ،

واخبرني طريقة الحصول على هذا الخطأ.

 

جعفر

:')

If Val(x) <> Val(ctl.OldValue) Then

حيث ينتقل المؤشر بعد تعديل اي حقل منضم الى ذلك الحقل الغير منضم

وقد ذكرت في بداية مشاركتي ان هناك مربع نص غير منضم بالنموذج ....

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

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim ctl As Access.Control
    Dim jLock As Integer
    Dim jItems As String, Style, Response
    
    jLock = 0
    jItems = ""
    
    'Don't go through New Records
    If Me.NewRecord = False Then
        'go through Form controls
        For Each ctl In Me.Controls
            'only Textboxes
            If ctl.ControlType = acTextBox Then
                
                ctl.SetFocus
                'check if the value has been changed
                If Val(Nz(ctl.Text, "")) <> Val(Nz(ctl.OldValue, "")) Then
                    
                    jLock = 1
                    jItems = "The Field: " & ctl.Name & vbCrLf & _
                             "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _
                             "The New value : " & ctl.OldValue & vbCrLf & _
                             "------------------------------------" & vbCrLf & jItems
                End If  'Nz
                    
            End If  'ControlType
        Next
    
    'the confirmation
        If jLock = 1 Then
                    
            jItems = jItems & vbCrLf & vbCrLf & _
                     "Do you want to Accept Changes?"
                           
            Style = vbYesNo + vbCritical + vbDefaultButton2
                    
            Response = MsgBox(jItems, Style, Title, Help, Ctxt)
            If Response = vbYes Then
                DoCmd.Save
            Else
                Cancel = True
                Me.Undo
            End If
                    
        End If  'jLock
        
    End If  'NewRecord

    Set ctl = Nothing
    
End Sub

 

رابط هذا التعليق
شارك

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

وليس من المهم اظهار القيم بعد التعديل وقبله بالرساله .

ثم ماذا لو استخدمنا :

If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acCheckBox Then

ومع هذا فهناك اخطأ تظهر وثقل شديد ... وهذا المرفق Alertmsg.rar

 

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

مع اني لست من محبي SendKeys ، إلا اني لم اجد أمرا آخر:blink:

 


Private Sub Form_Dirty(Cancel As Integer)

    Dim jItems As String, x, Style, Title, Response, Help, Ctxt

    jItems = "The Field: " & Me.ActiveControl.Name & vbCrLf & _
             "is changed!!" & vbCrLf & _
             "Do you want to Accept Changes?"
                           
    Style = vbYesNo + vbCritical + vbDefaultButton2
                    
    Response = MsgBox(jItems, Style, Title, Help, Ctxt)
    If Response = vbYes Then
        'DoCmd.Save
        Me.Dirty = False
    Else
        Cancel = True
        Me.Undo
    End If
    
    SendKeys "{F5}"
    
End Sub

 

جعفر

602.Alertmsg.accdb.zip

رابط هذا التعليق
شارك

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