اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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

قام بنشر

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

jjafferr@

 

 

قام بنشر

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

 

اخي حمدي ،

1. نت غيرت حدث "قبل التحديث" ، بدل ان يكون للحقول ، جعلته للنموذج ، والعمل اختلف كليا !!

2. وحدة الافلات هي التي كانت المشكلة ، وليس الكود الذي اعطيتك ،

3. انت نسيت ان تنسخ سطر Exit Sub للكود !!

 

على العموم ، تفضل:


Private Sub Form_BeforeUpdate(Cancel As Integer)

On Error GoTo err_chk_BeforeUpdate

    Dim ctl As Control
    Dim rst As DAO.Recordset
    Dim dbs As DAO.Database
    Dim fName As String: Dim myCriteria As String
    Dim A0 As String: Dim A1 As String: Dim A2 As String
          
    'Set ctl = Me.ActiveControl
    Set ctl = ctlDrop
    
    fName = "[" & Mid(ctl.Name, 1, Len(ctl.Name) - 1) & "-مادة" & Right(ctl.Name, 1) & "]"  '[الاثنين-مادة1]
    myCriteria = "[" & ctl.Name & "]=" & Chr(39) & ctl.Value & Chr(39)
    
    'A0 = DLookup(ctl.Name, "Teacher Class", myCriteria)
    'A1 = DLookup(fName, "Teacher Class", myCriteria)
    'A2 = DLookup("[NAMEe]", "Teacher Class", myCriteria)
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Select * From [Teacher Class] Where " & myCriteria)
    A0 = rst(ctl.Name)
    A1 = rst(fName)
    A2 = rst!NAMEe

'    If A0 > 0 Then
        Beep
        If MsgBox("...هذا الفصل " & ctl.Name & "..لديه مادة.." & vbCrLf & _
           "  باسم : " & A1 & vbCrLf & _
           "  للمدرس : " & A2, _
           vbYesNo + vbCritical + vbMsgBoxRight, "تنبيه") = vbNo Then
           Me.Undo
           Cancel = True
        End If
'    End If

Exit_chk_BeforeUpdate:
    rst.Close: Set rst = Nothing: dbs.Close
    
Exit Sub
err_chk_BeforeUpdate:

    If err.Number = 3021 Then
        Resume Next
    Else
        MsgBox err.Number & vbCrLf & err.Description
    End If
End Sub

 

 

جعفر

  • Thanks 1
قام بنشر

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

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

abject  variable with variable not set 91
ومرفق النموذج لمعرفة سبب ظهور الرسائل
ولك من الشكر الجزيل ومن العرفان المزيد ومن الاحترام الكثير

jjafferr@

 

 

جدول الحصص.rar

قام بنشر

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

 

بما انك عملت تغيير في الكود الاصل ، واللي كان تابع لحدث "قبل التحديث" الحقول ، فيجب ان نُرجع الكود ، بحيث انه يخاطب كود "قبل تحديث النموذج" ،

وبدل ان اضيف الكود لكل حقل ، اعمل التالي:

اختار الحقول التي يجب على البرنامج يتأكد منها (كما في الصورة ادناه) ،

ثم في الحدث "قبل التحديث" لهذه الحقول ، ننادي الوحدة النمطية chk_BeforeUpdate (رجاء كتابة اسم الوحدة النمطية كما تراها في الصورة ادناه) ، هكذا :

Clipboard01.jpg.4f8b1d9b3f18a8eae990900ff56f658c.jpg

.

وعليه ، فيجب علينا إضافة الوحدة النمطية الجديدة ، وعمل تعديل بسيط على الكود الاصل ، ليصبحا هكذا :


Function chk_BeforeUpdate()
    Call Form_BeforeUpdate(0)
End Function

Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo err_chk_BeforeUpdate

    Dim ctl As Control
    Dim rst As DAO.Recordset
    Dim dbs As DAO.Database
    Dim fName As String: Dim myCriteria As String
    Dim A0 As String: Dim A1 As String: Dim A2 As String

    If Left(Me.ActiveControl.Name, Len("TextBox")) <> "Textbox" Then
        Set ctl = Me.ActiveControl
    Else
        Set ctl = ctlDrop
    End If
    
    fName = "[" & Mid(ctl.Name, 1, Len(ctl.Name) - 1) & "-مادة" & Right(ctl.Name, 1) & "]"  '[الاثنين-مادة1]
    myCriteria = "[" & ctl.Name & "]=" & Chr(39) & ctl.Value & Chr(39)
    
    'A0 = DLookup(ctl.Name, "Teacher Class", myCriteria)
    'A1 = DLookup(fName, "Teacher Class", myCriteria)
    'A2 = DLookup("[NAMEe]", "Teacher Class", myCriteria)
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Select * From [Teacher Class] Where " & myCriteria)
    A0 = rst(ctl.Name)
    A1 = rst(fName)
    A2 = rst!NAMEe

'    If A0 > 0 Then
        Beep
        If MsgBox("...هذا الفصل " & ctl.Name & "..لديه مادة.." & vbCrLf & _
           "  باسم : " & A1 & vbCrLf & _
           "  للمدرس : " & A2, _
           vbYesNo + vbCritical + vbMsgBoxRight, "تنبيه") = vbNo Then
           Me.Undo
           Cancel = True
        End If
'    End If

Exit_chk_BeforeUpdate:
    rst.Close: Set rst = Nothing: dbs.Close
    
Exit Sub
err_chk_BeforeUpdate:

    If err.Number = 3021 Then
        Resume Next
    Else
        MsgBox err.Number & vbCrLf & err.Description
    End If
End Sub

.

اما بالنسبة الى رسائل الخطأ التي تكلمت عنها ، فلا علم لي بها , ولم تظهر لي.

 

جعفر

جدول الحصص.zip

  • Thanks 1
قام بنشر

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

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

 

jjafferr@

 

جدول الحصص.rar

قام بنشر

انا لم انزل مرفقك ، فالكود السابق لم يكن يعمل على المادة اصلا !!

جرب الكود التالي


Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo err_chk_BeforeUpdate

    Dim ctl As Control
    Dim rst As DAO.Recordset
    Dim dbs As DAO.Database
    Dim fName As String: Dim myCriteria As String
    Dim A0 As String: Dim A1 As String: Dim A2 As String

    If Left(Me.ActiveControl.Name, Len("TextBox")) <> "Textbox" Then
        Set ctl = Me.ActiveControl
    Else
        Set ctl = ctlDrop
    End If
    
    'fName = "[" & Mid(ctl.Name, 1, Len(ctl.Name) - 1) & "-مادة" & Right(ctl.Name, 1) & "]"  '[الاثنين-مادة1]
    fName = "[" & Mid(ctl.Name, 1, Len(ctl.Name) - 1) & Right(ctl.Name, 1) & "]"
    myCriteria = "[" & ctl.Name & "]=" & Chr(39) & ctl.Value & Chr(39)
 Debug.Print "Select * From [Teacher Class] Where " & myCriteria
 
    'A0 = DLookup(ctl.Name, "Teacher Class", myCriteria)
    'A1 = DLookup(fName, "Teacher Class", myCriteria)
    'A2 = DLookup("[NAMEe]", "Teacher Class", myCriteria)
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Select * From [Teacher Class] Where " & myCriteria)
    A0 = rst(ctl.Name)
    A1 = rst(fName)
    A2 = rst!NAMEe

'    If A0 > 0 Then
        Beep
        If MsgBox("...هذا الفصل " & ctl.Name & "..لديه مادة.." & vbCrLf & _
           "  باسم : " & A1 & vbCrLf & _
           "  للمدرس : " & A2, _
           vbYesNo + vbCritical + vbMsgBoxRight, "تنبيه") = vbNo Then
           Me.Undo
           Cancel = True
        End If
'    End If

Exit_chk_BeforeUpdate:
    rst.Close: Set rst = Nothing: dbs.Close
    
Exit Sub
err_chk_BeforeUpdate:

    If err.Number = 3021 Then
        Resume Next
    Else
        MsgBox err.Number & vbCrLf & err.Description
    End If
End Sub

 

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

 

جعفر

  • Thanks 1
قام بنشر

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

 

jjafferr@

 

قام بنشر

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

 

1. تختار جميع الحقول ،

2. تختار لون الخلفية الذي تريده اذا كان الحقل فيه قيمة ، وهنا انا اخترت الاخضر ، وتلون الحقول كلها ،

Clipboard01.jpg.bfb042f39bfda812451220830e548395.jpg

.

1. واثناء اختيار جميع الحقول ،

2. انقر على زر التنسيق الشرطي ،

3. ادخل هذه القيمة ، و ضع الرمز  '  مرتين (يعني هذا ليس الرمز " )

Clipboard02.jpg.5279327175fe51acc0c2ad0fa709751e.jpg

.

والنتيجة:

Clipboard03.jpg.d8d3dd92f8422abc3670157b365d3ef3.jpg

.

وللأمانه العلمية ، فانا اتبعت الطريقة من هذا الرابط:

https://stackoverflow.com/questions/10703461/is-null-conditional-formatting-ms-access-forms

 

جعفر

قام بنشر

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

jjafferr@

 

قام بنشر

طلبك غير واضح!!

 

وعلى العموم ، نحن بهذه الطريقة خرجنا عن اصل الموضوع الذي تم الوصل لحل له ، فرجاء تعمل لك موضوع جديد ، ولكن اشرح فيه المطلوب وبالتفصيل ، وبمثال:smile:

 

جعفر

  • 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