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

ماهو بديل الأمر Refresh


alsihran
إذهب إلى أفضل إجابة Solved by jjafferr,

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

السلام عليكم 

بالمرفق نموذج frm بداخله نموذج فرعي 

النموذج الفرعي يحتوي على حقل 

Ids   EDate F1 F2 F3  F4

عند اختيار اي عنصر من عناصر القائمة في الحقول 

F1 F2 F3  F4  لايظهر في الحقل الأخر 

مثلا 

عند اختيار اسم في الحقل  F1  فلا يظهر في القائمة المنسدلة للحقل    F2    , F3   , F4   

ونفس الشي لبقية الحقول عند اختيار اسم لايظهر في القوائم المنسدلة للحقول الأخرى 

الأمر ما شي تمام 

المشكلة 

وضعت حدث عند التركيز على الحقل  F1 F2 F3  F4

Private Sub F1_GotFocus()
Me.Refresh
End Sub
Private Sub F2_GotFocus()
Me.Refresh

End Sub

Private Sub F3_GotFocus()
Me.Refresh

End Sub

Private Sub F4_GotFocus()
Me.Refresh
End Sub

وذلك من أجل إنعاش النموذج وتصفية القائمة قبل الإختيار 

لكن ذلك يحدث بطأ واهتزاز في النموذج 

فهل من حل بديل للأمر 

Me.Refresh

لتلافي البطأ واهتزاز النموذج 

 

FRm_Refresh.rar

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

2 ساعات مضت, محمد أبوعبدالله said:

استخدم الكود التالي

شكرا لك اخي الكريم 

فتحت المرفق الذي وضعته ولم اجد أي تعديل 

طبقت الكود الذي وضعته لكن يظهر رسالة خطأ

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

3 ساعات مضت, ازهر عبد العزيز said:

تفضل لعلة المطلوب 

يعطيك العافية

ليس هو المطلوب 

فهناك فرق بين تنفيذ الامر بعد التحديث وعند التركيز على الحقل 

 

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

35 دقائق مضت, Hawiii said:

جرب هذا الكود وإذا نجح طبقه على الباقي.

أخي الكريم شكر لك 

يجب أن يكون الأمر قبل الاختيار من القائمة أي قبل التحديث لإشعار النموذج بالتغيرات التي حدثت على الحقول الأخرى 

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

لذلك تم استخدام الامر 

Refresh

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

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

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

سأشرح ماهو البناء المصمم لعل احد الأساتذة او الاخوة تكون له فكر افضل 

المرفق عبارة عن جدول دوام لموظفين لأربع وردايات 

جدول Emp هو جدول بيانات الموظفين 

جدول tblchfit عبارة عن جدول الورديات 

حقل Edate  يعبر عن تاريخ اليوم      حقل F1  للورديه الأولى  حقل F2  للورديه الثانية  حقل F3  للورديه الثالثه    F4  للورديه الرابعه   CRsms  للعطلة الأسبوعية 

الان   مثلا عند اختار اسم موظف في الوردية الأولى يجب ان لا يظهر أسمه في بقية الورديات في نفس اليوم (أي السجل الحالي )

لعمل ذلك قمت بعمل استعلامات توحيد    F1  F2  F3  F4 F5  بحيث كل استعلام يخص حقل من حقول الورديات ويتم الاستعلام عن طريقه

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

من تم اختيار اسمه في احد الورديات 

الامور الى هنا كلها تمشي بشكل جيد 

المشكلة 

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

ولاشعار النموذج بالتغيرات التي حدثت اضطررت الى وضع الامر  Refresh  في حدث عند التركيز على مربع الكمبو بوكس ويتم تنفيذ الامر بنجاح 

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

فهل هناك طريقة اخرى  او تصميم اخر تمكنني من تنفيذ المطلوب 

 

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

السلام عليكم 🙂

في ٣‏/١١‏/٢٠٢٠ at 01:35, alsihran said:

فهل هناك طريقة اخرى  او تصميم اخر تمكنني من تنفيذ المطلوب

 

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

 

.

جعفر

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

2 ساعات مضت, jjafferr said:

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

الحمد لله اخيرا وجدت من يرد على الموضوع 

بشكل عام اعتقد نفس الفكرة 

لكن لا أعرف كيف ستطبق ..... !!!!!!

مثلا كيف سأتعامل مع الاسماء لمدة      30 يوم      كل يوم 4 فترات 

بعض الاسماء التي لها اجازه ومسجله في جدول الاجازات يجب ان لاتظهر اسمائهم في نفس اليوم اذا كان يقع خلال الاجازة 

علما ان اول خطوة ستكون ادراج ايام الشهر بالتاريخ الهجري بشكل تلقائي وليس يديوي

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

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

المعضلة في طريقة عملك السابقة ، هي السماح بأكثر من اختيار في حقل الكومبوبوكس ، وهو الامر والميزة اللي انت محتاج له ،

وفي الواقع ، هذه احد مساوئ الاكسس ، بأن يعطون المستخدم طريقة عمل ، يكون فيها المشاكل في طريقة التعامل معها برمجيا !!

 

لهذا السبب ، ان شاء الله بكرة انظر في الطريقة الجديدة ، وبقية طلباتك يمكن التعامل معاها عن طريق معايير في الاستعلام 🙂

 

جعفر

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

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

المعضلة في طريقة عملك السابقة ، هي السماح بأكثر من اختيار في حقل الكومبوبوكس ، وهو الامر والميزة اللي انت محتاج له ،

جزاك الله وجزى والديك كل خير 

 

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

السلام عليكم 🙂

 

في اعتقادي ان هذه اسهل طريقة ، واذا استعملت التنسيق الشرطي لتلوين السجلات اللي تم اختيارها ، سيكون الفت للنظر 🙂

ما بدخل في تفاصيل ، لأنه في الواقع مافي تفاصيل ، جرب ببيانات آخر يوم مثل تاريخ اللي في الصوره ، وبعدها اعمل سجل جديد بواسطة "ادخال سجل جديد لليوم" 🙂

 

صحيح اني استعملت 5 نماذج فرعيه ، لأنه في الواقع مافي فرق بينها وبين ComboBox و ListBox (في استغلالهم طاقات الاكسس) ، 

ولكن النموذج فيه امكانيات اكثر ، ونحن متعودين على التعامل معاه اكثر ، فيكون التعامل معاه اسهل ، وكل نموذج فرعي له استعلام 🙂

 

image.png.73c04ca9e5808957a0f091315b8376ea.png

.

هذه احداث النموذج

Private Sub cmd_Add_New_Click()

    'check if Records exist for this date
    If DCount("*", "tbl_Shifts", "[nDate]=#" & Date & "#") = 0 Then
        DoCmd.SetWarnings False
            DoCmd.OpenQuery "qry_Append_Today"
        DoCmd.SetWarnings True
    End If
    
    'go to this Record
    Me.Requery
    DoCmd.GoToRecord , , acLast
    
End Sub


Private Sub cmd_Requery_Click()
    
    'get the data based on the selected Dates
    Me.Requery
End Sub


Private Sub Form_Current()

    'Count the Selected
    Call Count_Selected
    
End Sub

.

والحدث "بعد التحديث" لزر الاختيار في النموذج الفرعي ، ينادي الوحدة النمطية De_Select ، ويرسل معها رقم الشفت ، اللي يتماشى مع رقم النموذج الفرعي :

image.png.f208edddb76ade692dbbcc4bb68651d0.png

.

وهذه هي الوحدة النمطية :

Option Compare Database
Option Explicit

    Dim frm As String
    Dim sfrm As String
    Dim ctrl As Control
'

Public Function De_Select(sShift As Integer)
 
    
    frm = Screen.ActiveForm.Name                        'Main Form name
    sfrm = Forms(frm).Controls("sfrm_" & sShift).Name   'SubForm name
    
    
    'change the nShift of the Record, based on the selection of nSelected
    If Forms(frm)(sfrm)("nSelected") = -1 Then
        Forms(frm)(sfrm)("nShift") = sShift
    Else
        Forms(frm)(sfrm)("nShift") = 0
    End If
    
    
    'save the Record to show the change on other sfrm
    If Forms(frm)(sfrm).Form.Dirty Then Forms(frm)(sfrm).Form.Dirty = False
    
    
    'requery all the SubForms to show the correct Selection
    Call Re_query
    
End Function

Public Function Re_query()
    
    'requery all the SubForms on the Main Form
    For Each ctrl In Forms!frm_Daily_Shift.Form.Controls

        If ctrl.ControlType = acSubform Then
            Forms!frm_Daily_Shift(ctrl.ControlName).Form.Requery
        End If

    Next
            
    
    'show the number of Selected Records
    Call Count_Selected
    
    
End Function

Public Function Count_Selected() As Integer
On Error GoTo err_Count_Selected

    Dim rst As DAO.Recordset
    Dim i As Integer
    
    '5 subForms
    For i = 1 To 5
    
        Count_Selected = 0
        
        Set rst = Forms!frm_Daily_Shift("sfrm_" & i).Form.RecordsetClone
        rst.MoveFirst
        
        Do Until rst.EOF
            
            If rst!nSelected = -1 Then
                Count_Selected = Count_Selected + 1
            End If
            
            rst.MoveNext
            
        Loop
            
        'show the result of the sfrm Selected Count
        Forms!frm_Daily_Shift("Sum_" & i) = Count_Selected
        
    Next i
    
Exit_Count_Selected:

    rst.Close: Set rst = Nothing
    Exit Function
    
err_Count_Selected:

    If Err.Number = 3021 Then
        'no Records
        Resume Exit_Count_Selected
    Else
        MsgBox Err.Number & Err.Description
    End If
    Resume Exit_Count_Selected
    
End Function

.

جعفر

1281.FRm_Refresh.accdb.zip

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

3 ساعات مضت, jjafferr said:

في اعتقادي ان هذه اسهل طريقة ، واذا استعملت التنسيق الشرطي لتلوين السجلات اللي تم اختيارها ، سيكون الفت للنظر

شكرا لك 

احتاج وقت  لمعرفة  الطريقه وفهمها ولي عودة 

 

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

طريقة العمل :

عند عمل يوم جديد ، نقوم بإدراج جميع الموظفين من الجدول Emp الى الجدول tbl_Shifts ، ويكون رقم الشفت امام كل سجل = 0  ،

في النموذج :

  1. كل نموذج فرعي يأخذ بياناته من الجدول tbl_Shifts ، ومن نفس الحقل (لا توجد جقول مختلفة لكل شفت) ، ويعتمد على رقم النموذج الفرعي (رقم الشفت) ، فيُظهر رقم الشفت الخاص به ، او صفر (ومعناه السجلات التي لم يتم اختيارها بعد) ،
  2. ولما نختار اسم الموظف في النموذج الفرعي ،فهو يغير رقم الشفت من صفر الى رقم الشفت ، بإستخدام الدالة De_Select(1)  مثلا ، والتي تدل على اننا في الشفت 1.

 

هناك الكثير من الاختصارات في الكود ،

فمثلا ، بدل ان نعمل كود خاص لكل نموذج فرعي ، عند اختيار الاسم :

  1. نغير الشفت من صفر الى رقم الشفت ،
  2. نحفظ السجل ،
  3. نطلب البيانات من اول وجديد لجميع هذه النماذج الفرعية ، حيت ان الاختيار سيغير مكان الموظف الى شفت الذي ينتمي (وهذه كانت المعضلة في برنامجك السابق) ،
  4. ثم نجمع الحقول التي تم اختيارها في كل نموذج فرعي ، ونضع القيمة في الاسفل ،

هنا الدالة De_Select تقوم بجميع هذه الخطوات ، ولكل النماذج 🙂

 

وتلاحظ ان النماذج الفرعيه لا يوجد بها كود اصلا ، وذلك لأننا ننادي الكود من اعدادات الحقل nSelected (بدل ان نعمل حدث بعد التحديث 🙂 )

image.png

.

جعفر

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

استاذ @jjafferr

كلمات الشكر لن توفيك حقك

ولكن الدعاء في ظهر الغيب هو ما مكنني ان اقدمه لك 

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

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

لكن تواجهني بعض المشاكل بعضها ذكرتها لك من البداية 

فمثلا 

في ١٢‏/١١‏/٢٠٢٠ at 23:16, alsihran said:

علما ان اول خطوة ستكون ادراج ايام الشهر بالتاريخ الهجري بشكل تلقائي وليس يديوي

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

لانك تضيف الاسماء تلقائيا في جدول الورديات ومن ثم تقوم باختيارهم في الفترات 

بالمرفق مثال لكيفية ادراج ايام الشهر بالكامل ارجو ان تنظر إليه 

 

المشكلة الثانية 

 في المثال الذي ارفقته انا  ايام الشهر يتم عرضها بالكامل في النموذج عن طريق جعل النموذج نماذج مستمرة 

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

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

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

 

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

فهل سيؤثر هذا عند قيامنا برط استعلام الاجازات مع الاستعلامات التي عملتها انت ليتم استثناء اسمائهم من الظهور 

 

شكر لك وتقبل تحياتي 

 

Database N.rar

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information