الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إحتاج إلى جملة SQL Update Select لتحديث البيانات جدول

بدأه ramyooooo في 27 مارس 2018 · 5 رد · 1,751 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرفق ملف أكسيس يوضح المراد عمله  بالتفصيل

عند التشغيل يتم تغيير النسبة المئوية  ثالث سطر من الأعلى   وستظهر المشكلة

شكرا للمساعدة مقدما

N1.mdb

#2

السلام عليكم و رحمة الله و بركاته 
لو سمحت توضح الآلية .. لكي نتمكن من مساعدتك.

#3

لتوضيح آلية العمل

يوجد لدينا جدول عقود العملاء   كل عميل له مجموعة من العقود تسجل فى جدول  T1

وكل عقد يتكون من مجموعة أوامر شراء   وهو جدول أوامر الشراء   T2

وكل أمر شراء يتكون  من عمليات  وهو الجدول الثالث   T3

وعلى أساس كل عملية تتم    يتم إحتساب عمولة يتم تجميعها على مستوى العمليات     وتسجل هذه العمولة فى خانة  بجدول أوامر الشراء
المطلوب عمله عند تغيير العمولة  على مستوى العقد يتم تنفيذ  جملة SQL Update لإحتساب العمولات فى جدول أوامر الشراء

ويتم احتساب العمولة كالتالى   ( الكمية × السعر)   × العمولة    (وهى نسبة تحدد على مستوى العقد كله)    ويتم تجميع العمولات  على أساس أوامر الشراء وليس العقد كله

أرفقت ملف أخر للتوضيح أكثر N2.mdb

وشكرا لإهتمام حضرتك

تم تعديل هذه المشاركة بواسطة ramyooooo في 1 أبريل 2018 في 13:48 — السبب: للتوضيح أكثر

#4

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);
 

 

 

N3.rar

N3.mdb

تم تعديل هذه المشاركة بواسطة الفهرى في 2 أبريل 2018 في 13:00

#5

أشكرك يا استاذ الفهرى    على إجابتك
أنا بصراحة لسه مجربتش الكود اللى حضرتك كتبتو
أنا حاليا بحاول أستنفذ جميع المحاولات انى أقدر أنفذ المطلوب عن طريق جملة 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

#6

وجدت الحل الحمد لله   وقبل ما أشرح الطريقة

الأول أشكر كل من حاول يجد حل للكود  أشكركم 

الطريقة

لازم تعرفو الأول معلومة توصلتلها بشهادة مايكروسوفت نفسهم  إن الـ 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    وماننساش ربط الجدولين ببعض بالمفاتيح

 

SQL = "UPDATE SubPo INNER JOIN PO ON SubPo.Po_num = PO.PO_Num
 "SET PO.Comm = [SubPo].[Comm]
 CurrentDb.Execute SQL

 

وفى الآخر ماننساش نمسح القيم الموجوده بالجدول الجديد  علشان مالهاش لزوم تفضل موجودة   خصوصا لو استخدمتو الجدول مره تانية

وإلا هاتدخل بيانات جديدة مع بيانات قديمة    وليكو حرية الاختيار

اللى عاوز يطبق على المثال المرفق سابقا يقولى لأن فيه اختلاف فى المسميات طبعا

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

ملحوظة  :   

بالنسبة للكود بتاع الأستاذ الفهرى  ماجربتوش بصراحة  بس لازم أجربو علشان أعرف الفرق

تم تعديل هذه المشاركة بواسطة ramyooooo في 4 أبريل 2018 في 13:02

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…