مرفق ملف أكسيس يوضح المراد عمله بالتفصيل
عند التشغيل يتم تغيير النسبة المئوية ثالث سطر من الأعلى وستظهر المشكلة
شكرا للمساعدة مقدما
السلام عليكم و رحمة الله و بركاته
لو سمحت توضح الآلية .. لكي نتمكن من مساعدتك.
لتوضيح آلية العمل
يوجد لدينا جدول عقود العملاء كل عميل له مجموعة من العقود تسجل فى جدول T1
وكل عقد يتكون من مجموعة أوامر شراء وهو جدول أوامر الشراء T2
وكل أمر شراء يتكون من عمليات وهو الجدول الثالث T3
وعلى أساس كل عملية تتم يتم إحتساب عمولة يتم تجميعها على مستوى العمليات وتسجل هذه العمولة فى خانة بجدول أوامر الشراء
المطلوب عمله عند تغيير العمولة على مستوى العقد يتم تنفيذ جملة SQL Update لإحتساب العمولات فى جدول أوامر الشراء
ويتم احتساب العمولة كالتالى ( الكمية × السعر) × العمولة (وهى نسبة تحدد على مستوى العقد كله) ويتم تجميع العمولات على أساس أوامر الشراء وليس العقد كله
أرفقت ملف أخر للتوضيح أكثر N2.mdb
وشكرا لإهتمام حضرتك
تم تعديل هذه المشاركة بواسطة ramyooooo في 1 أبريل 2018 في 13:48 — السبب: للتوضيح أكثر
N3.rarربما يكون يفيد هذا الحل
أولاً يجب إضافة الدالة التالية
Public Function my_calc(ByVal xkey1 As Long, ByVal xkey2 As Long) As Double
On Error Resume Next
Dim dbs As Database, strsql As String, rst As Recordset, rstT3 As Recordset
Dim xprcent As Single, xsum As Double, xprdct As Double
xsum = 0
Set dbs = CurrentDb
strsql = " SELECT T1.*"
strsql = strsql & " FROM T1"
strsql = strsql & " WHERE (((T1.Id_Key1)=" & xkey1 & "));"
Set rst = dbs.OpenRecordset(strsql)
xprcent = Nz(rst![Record2])
strsql = " "
strsql = " SELECT T3.*"
strsql = strsql & " FROM T3"
strsql = strsql & " WHERE (((T3.ID_Key2)=" & Nz(xkey2) & "));"
Set rst = dbs.OpenRecordset(strsql)
Do
xsum = xsum + Nz(rst![Rec1]) * Nz(rst![Rec2])
rst.MoveNext
Loop Until rst.EOF
my_calc = (xsum * xprcent) / 100
End Function
ساعتها يمكن تنفيذ عبارة التحديث ستكون التالية
UPDATE T2 SET T2.Rec2 = my_calc(T2.ID_key1,T2.ID_Key2);
تم تعديل هذه المشاركة بواسطة الفهرى في 2 أبريل 2018 في 13:00
أشكرك يا استاذ الفهرى على إجابتك
أنا بصراحة لسه مجربتش الكود اللى حضرتك كتبتو
أنا حاليا بحاول أستنفذ جميع المحاولات انى أقدر أنفذ المطلوب عن طريق جملة Update واحده شامله كل المطلوب
سؤالى دلوقت هل فيه جملة Update حد عملها ونجحت شرط تكون تحتوى على Subquery موش شرط فى المثال المرفق فى أى برنامج تانى؟؟؟؟
ياريت ارفاق الكود
أنا عندى كود حصلت عليه من الانترنت بس موش شغال بس أنا هارفقو علشان يكون مثال للمطلوب
Update contacts set Commonsid=
(select Commonsid from contacts1 where contactid = contacts.contactid and Commonsid is not null)
where Commonsid is null
فلو حد عندو كود مشابه يكون شغال ياريت يرفقو موش شرط يكون للحالة بتاعتى
الغرض أشوف جملة Select مع Update
وشكرا للجميع
تم تعديل هذه المشاركة بواسطة ramyooooo في 4 أبريل 2018 في 07:55
وجدت الحل الحمد لله وقبل ما أشرح الطريقة
الأول أشكر كل من حاول يجد حل للكود أشكركم
الطريقة
لازم تعرفو الأول معلومة توصلتلها بشهادة مايكروسوفت نفسهم إن الـ Update لا يدعم الـ Subquery فى Vba Code
إنما Insert بيدعم الـ Subquery يعنى ممكن تعملو Select جواها عادى جدا ودى عن تجربة
طب ليه Update موش بيدعم ? دى تسألو فيها مايكروسوف
نيجى لطريقة الحل
هو الحل تم بطريقة الإلتفاف حوالين الحل
الأول يتم إنشاء جدول فيه خانات عايز أستخدمها للتعديل يعنى مثلا القيم الجديدة وماننساش مفتاح الربط لهذه القيم وأنا هنا عملت الجدول إسمو SubPo
ثم يتم تقسيم الحل إلى حركتين
أولا أعمل جملة Insert أو Select Into اللى بيها يتم جمع وتحصيل النتيجة بالجدول الجديد
CurrentDb.Execute " INSERT INTO SubPo (Po_num,Comm,contract_num_from)
SELECT Po_num ,Sum([qty_case]*[Unit_Price]*" & Agant_Comm & " / 100),Contract_num FROM Operation GROUP BY Operation.PO_Num, Operation.Contract_Num HAVING (((Operation.Contract_Num)=" & Contract_Num_from & "));"
ثانيا يتم عمل جملة Update عادى جدا حيث يتم تحديث القيم من جدول SubPo لوضعها داخل جدول الـ Po وماننساش ربط الجدولين ببعض بالمفاتيح
وفى الآخر ماننساش نمسح القيم الموجوده بالجدول الجديد علشان مالهاش لزوم تفضل موجودة خصوصا لو استخدمتو الجدول مره تانية
وإلا هاتدخل بيانات جديدة مع بيانات قديمة وليكو حرية الاختيار
اللى عاوز يطبق على المثال المرفق سابقا يقولى لأن فيه اختلاف فى المسميات طبعا
وشكر وتقدير للمنتدى الجميل
ملحوظة :
بالنسبة للكود بتاع الأستاذ الفهرى ماجربتوش بصراحة بس لازم أجربو علشان أعرف الفرق
تم تعديل هذه المشاركة بواسطة ramyooooo في 4 أبريل 2018 في 13:02
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…