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

تعديل كود


Ahmed_J
إذهب إلى أفضل إجابة Solved by Moosak,

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

السلام عليكم اساتذتي الاعزاء

لدي ملف فيه  ثلاث جداول  الاول (salary) فيه جدول الرواتب  والثاني (table1) فيه معلومات عن الموظف  والثالث (tp1) جدول القيم ويحتوي على (110) قيمة

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

1- الشرط الاول / عدد الاطفال الموجود بالنموذج  وهو مثبت في الجدول (tp1) من (0-8)

2- الشرط الثاني / قيمة الراتب الموجودة بالنموذج وهي مثبيتة في في اعلى الجدول (tp1)

علما انني استخدم وحدة نمطية للاكواد

تحياتي للجميع

salary.accdb

 

1.jpg

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

السلام عليكم استاذ جعفر

المثال موجود بالصورة المرفقة

يعني اريد جلب قيمة من الجدول (tp1) للنموذج بناء على شرطين شرط عدد الاطفال وشرط الراتب وهما موجودين في النموذج وفي الجدول (tp1) 

مثلا موظف راتبه  970000 ولديه طفل واحد (النتيجة بالنموذج) =87,504

مثلا موظف راتبه 581000 ولديه طفلين (النتيجة بالنموذج )= 12077

وهكذا

علما بان النموذج  المرفق حاليا يجلب البيانات من الجدول (tp1) بصورة صحيحة لغاية الحقل 11  

وما زاد عن 11 فهو خطا

تحياتي لك استاذ

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

  • أفضل إجابة

وعليكم السلام أخي أحمد 🙂 

أنا اشتغلت حسب فهمي وهذي النتيجة :

image.png.62990226467b18c17f2a6dea9c13c059.png

وعملتلك دالة تبحث عن العمود اللي يطابق الراتب اللي في السجل الأول ، ثم عن السجل اللي يطابق عدد الأبناء :

Function FinedSubSalary(Salary As Double, NumOfChiledren As Integer) As Double
' Moosak
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim x As Integer

Set DB = CurrentDb
Set RS = DB.OpenRecordset("tp1")

RS.MoveLast
RS.MoveFirst
If RS.EOF Then FinedSubSalary = 0: Exit Function

For x = 1 To 110
        If RS(x) = Salary Then
            FinedSubSalary = DLookup("[" & x & "]", "tp1", "Id=" & NumOfChiledren)
            'Debug.Print x, Salary
            GoTo Finish:
        Else
        End If
Next

Finish:
RS.Close
Set RS = Nothing
Set DB = Nothing
Exit Function

End Function

ثم جعلت الدالة هي مصدر بيانات مربع النص (تعطيها الراتب وعدد الأبناء ) .. 

=FinedSubSalary([xx];[عدد الاطفال])

ثم جعلت النتيجة تتحدث كلما تم تعديل الراتب أو عدد الأبناء في النموذج .

والنتيجة كما رأيت .. 🙂 

 

Salary - Moosak.rar

تم تعديل بواسطه Moosak
  • Thanks 1
رابط هذا التعليق
شارك

السلام عليكم استاذ موسى

الله بيارك فيك  ويجعلها في ميزان حسناتك

النتائج طيبة ان شاء الله وجاري تجربة الملف 

فقط ملاحظة صغيرة لو سمحت

تاخر ظهور النتيجة قليلا (بطيئة) هل هو عادي ام لا

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

وعليكم السلام ورحمة الله وبركاته أخي أحمد 🙂

اللهم آمين وإياكم ..

منذ ساعه, Ahmed_J said:

تاخر ظهور النتيجة قليلا (بطيئة) هل هو عادي ام لا

تقريبا عادي ما دامه أجزاء من الثانية .. لكن لو زاد فربما يكون إما بسبب المعطيات غير دقيقة أو الجهاز بطيء ..

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

السلام عليكم

استاذي العزيز موسى @Moosak

الله يبارك فيك ويزيد من علمك

الحمد لله بعد التجربه كل شيء تمام عاشت ابدك

فقط لدي سؤال واحد لو سمحت؟

هل يمكن وضع شرط آخر  لدالة  DLookup  في داخل الوحدة النمطية (الكود فقط) والشرط موجود في النموذج  مثلا (متزوج) و (اعزب)

علما بان لدي نموذجين يعملان على نفس الوحدة النطية

22 ساعات مضت, Moosak said:
FinedSubSalary = DLookup("[" & x & "]", "tp1", "Id=" & NumOfChiledren)

هكذا

FinedSubSalary = DLookup("[" & x & "]", "tp1", "Id=" & NumOfChiledren1) And (Forms(aForm).Controls![متزوج])

تحياتي للجميع

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

السلام عليكم

اخي موسى والله مش عاوز اتعبك معي

لانك حللت لي مشكلة كنت اعاني منها

المهم 

الملف المرفق فيي النماذج  عدد (2) شرط  الحالة الاجتماعية (متزوج واعزب)

لو كان متزوج تظهر النتائج 

لو كان اعزب = صفر

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

تحياتي

salary.accdb

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

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

تم التعديل أخي أحمد .. الآن الدالة تستقبل مدخل أو متغير إضافي وهو (متزوج ؟) من نوع : نعم/لا - True/False :

Function FinedSubSalary(Salary As Double, NumOfChiledren As Integer, Optional IsMarried As Boolean = True) As Double
' Moosak
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim x As Integer

FinedSubSalary = 0

If IsMarried = False Then Exit Function

Set DB = CurrentDb
Set RS = DB.OpenRecordset("tp1")

RS.MoveLast
RS.MoveFirst
If RS.EOF Then GoTo Finish:

For x = 1 To 110
        If RS(x) = Salary Then
            FinedSubSalary = DLookup("[" & x & "]", "tp1", "Id=" & NumOfChiledren)
            'Debug.Print x, Salary
            GoTo Finish:
        End If
Next

Finish:
RS.Close
Set RS = Nothing
Set DB = Nothing
Exit Function

End Function

إذا متزوج تشتغل الدالة وإذا أعزب تعطيك صفر ..

وعشان تشتغل زين مع القائمة المنسدلة يلزمنا نحول العبارات (متزوج/أعزب) إلى صيغة (نعم/لا) وهكذا كانت الصيغة في مصدر بيانات مربع النص :

=FinedSubSalary([xx];[عدد الاطفال];IIf([الحالة الاجتماعية]="متزوج";True;False))

وهذي هي النتيجة النهائية

image.png.e91be84c0047d177584022fb06637d1c.png

salary - Moosak - 2.rar

تم تعديل بواسطه Moosak
تكملة الدالة
  • Like 1
  • 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