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

جمع كل سجل على حدة مع باقى السجلات فى الجدول


esam munir

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

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

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

لدى قاعدة بيانات كبيرة وإجتزئت منها جدول واحدة للرفع ولإيضاح المشكلة 

هذا الجدول به عدد من السجلات وكل سجل بة اخر 4 حقول وهما split1-split2-split3-split4 علما بأن الحقل الرئيسى فى هذا الجدول هو M

ما أحتاجة هو تجميع كل سجل على حدة مع باقى السجلات كلا على حدة وإظهار السجلات الناتجة فى إستعلام ويكون التجميع كالمثالى التالى :-

سجل رقم 6001 يتم تجميع حقل split1 مع حقل split1 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split1 مع حقل split2 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split1 مع حقلsplit3 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split1 مع حقل split4 فى سجل 6199 وذلك سجل ناتج 

ثم يبدأ تجميع 

سجل رقم 6001 يتم تجميع حقل split2 مع حقل split1 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split2 مع حقل split2 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split2 مع حقل split3 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split2 مع حقل split4 فى سجل 6199 وذلك سجل ناتج 

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

 

وحسابيا على هذا المرفق من المفترض ان تكون نتيجة السجلات 320 سجل ناتج فقط عن حاصل تجميع السجل الاول رقم 6001 مع باقى السجلات وبالتالى تكون النتيجة النهائية المفترض 320 سجل * 20 سجل عدد سجلات الجدول اى 6400 سجل جديد 

 

هل هذا ممكن او متاح لأننى بالفعل احتاج إلية جداااااااا

 

وشاكر جدا لحضراتكم 

test.rar

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

8 ساعات مضت, esam munir said:

هذا الجدول به عدد من السجلات وكل سجل بة اخر 4 حقول وهما split1-split2-split3-split4 علما بأن الحقل الرئيسى فى هذا الجدول هو M

ما أحتاجة هو تجميع كل سجل على حدة مع باقى السجلات كلا على حدة وإظهار السجلات الناتجة فى إستعلام ويكون التجميع كالمثالى التالى :-

سجل رقم 6001 يتم تجميع حقل split1 مع حقل split1 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split1 مع حقل split2 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split1 مع حقلsplit3 فى سجل 6199 وذلك سجل ناتج 

سجل رقم 6001 يتم تجميع حقل split1 مع حقل split4 فى سجل 6199 وذلك سجل ناتج 

عملت لك هذه الحالة في فورم وأنت كمل الباقي .:fff:

testAdd (1).rar

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

سؤالك جميل للغاية ..سيجعلني اعيد دراسة المصفوفات (Matrix) من جديد ..بعد انقطاع 36 سنة 

لكن احب ان اعرف ..لماذا تحتاج لهذا ؟ هل يمكنك ان تعطينا مثالا عمليا للحاجة لمثل تلك العملية الحسابية 

انا شغوف لمعرفة ذلك ..

تم تعديل بواسطه Eng.Qassim
  • Like 2
رابط هذا التعليق
شارك

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

 

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

اشكرك استاذ Eng.Qassim ودعنى اشرح لحضرتك بإختصار الغرض من ذلك 

هذة قاعدة بيانات لمصنع كرتون ونحتاج اضافة موديول خاص بالتخطيط ويقوم هذا الموديول بعمل عملية تربيط على هذة الاصناف لتشغيلها على خط الانتاج وملخص عملية الربط هو اننا نريد ان يقوم الاكسيس بعمل نتائج لجمع هذة الاصناف مع بعضها كما اوضحت سلفا للوصول الى اقصى استفادة من خط الانتاج وهو 180 سم حيث ان split 1 , 2 ,3 ,4 هى سم ولابد ان يعمل على كل split فى كل سجل مع كل split فى اى سجل اخر وبالطبع فإن عدد هذة السجلات قد يزيد او يقل لذا يجب ان تكون العمليات الحسابية على كامل سجلات الجدول وهى لن تزيد عن 100 سجل على اقصى تقدير للجدول 

 

الموضوع صعب ومعقد اعلم ذلك ولكنى رأيت حلول من حضراتكم لما هو أكثر تعقيدا من ذلك 

 

ولكم جزيل الشكر 

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

11 ساعات مضت, Eng.Qassim said:

لكن احب ان اعرف ..لماذا تحتاج لهذا ؟ هل يمكنك ان تعطينا مثالا عمليا للحاجة لمثل تلك العملية الحسابية

كنت سأسأل نفس السؤال 🙂 

1 ساعه مضت, esam munir said:

دعنى اشرح لحضرتك بإختصار الغرض من ذلك

طيب أخي عصام .. الطلب واضح لدي .. وعندي تصور مبدأي للحل ..

لكن أريدك أن تعطينا مثال لشكل النتيجة النهائية كيف تريدها أن تكون .. ؟؟

ممكن تصمم جدول بالأكسل عادي وتضع فيه نتيجة السجل الأول كمثال ..

لأن تصوري للنتيجة سيكون عن طريق إنشاء جدول آخر ( مؤقت ) تظهر فيه السجلات ( وليس استعلام )

وكذلك سيحصل تداخل في البيانات وستظهر لك السجلات متشابهة .. ولن تعرف كيف تميز بينها !!

حيث سيكون هناك 16 سجل ناتج للسجل رقم 6001 وحده .. كيف ستعرف أيها ل split1  أو split2  أو split3  أو split4  ؟

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

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

وانا فى شدة الإنتظار لحضرتك وجزاك الله خيرا مقدما 

test.xlsx

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

تم بحمد الله 🙂 

ما رأيك في هذه النتيجة ؟ ( قمت بتغيير تشكيلة الجدول عن المثال الذي أرفقته لتسهيل قرائة الأرقام 🙂 )

image.png.a3d94871e36b9306489ab480976a87b5.png

وهذا هو الكود الذي ينفذ الأمر :

Option Compare Database
Option Explicit

Private Sub DoSumBtn_Click()

'"planWWB"
'"Temp_Sum_T"
On Error GoTo HandleError
    
    Dim db As DAO.Database
    Dim Rs1 As DAO.Recordset
    Dim Rs2 As DAO.Recordset
    Dim x As Long, i As Integer
x = 1

CurrentDb.Execute "DELETE * FROM Temp_Sum_T;"

Set db = CurrentDb
    Set Rs1 = db.OpenRecordset("SELECT * FROM planWWB ORDER BY m;")
    If Not Rs1.BOF And Not Rs1.EOF Then
        Rs1.MoveFirst
        While (Not Rs1.EOF)
        
            For i = 3 To 6
                            
                CurrentDb.Execute "INSERT INTO Temp_Sum_T (No, m, Operation1, Result1 ) " & _
                                              "VALUES (" & x & "," & Rs1!m & ",'" & Rs1.Fields(i).Name & "'," & Rs1.Fields(i).Value & ");"
                
                Set Rs2 = db.OpenRecordset("SELECT * FROM planWWB where m <> " & Rs1!m & " ;")
                If Not Rs2.BOF And Not Rs2.EOF Then
                Rs2.MoveFirst
                
                While (Not Rs2.EOF)
                    Dim s1 As String, s2 As String, s3 As String, s4 As String
                    
                    s1 = Rs1.Fields(i).Name & " + " & Rs2.Fields(3).Name
                    s2 = Rs1.Fields(i).Name & " + " & Rs2.Fields(4).Name
                    s3 = Rs1.Fields(i).Name & " + " & Rs2.Fields(5).Name
                    s4 = Rs1.Fields(i).Name & " + " & Rs2.Fields(6).Name
                
                    CurrentDb.Execute "INSERT INTO Temp_Sum_T (No, m, m2, Operation1, Result1, Operation2, Result2, Operation3, Result3, Operation4, Result4 ) " & _
                    "VALUES (" & x & "," & Rs1!m & "," & Rs2!m & ",'" & _
                    s1 & "'," & (Rs1.Fields(i).Value + Rs2.Fields(3).Value) & ",'" & _
                    s2 & "'," & (Rs1.Fields(i).Value + Rs2.Fields(4).Value) & ",'" & _
                    s3 & "'," & (Rs1.Fields(i).Value + Rs2.Fields(5).Value) & ",'" & _
                    s4 & "'," & (Rs1.Fields(i).Value + Rs2.Fields(6).Value) & ");"
                
                Rs2.MoveNext
                DoEvents
                Wend
                End If
            Next i
                

            x = x + 1
            Rs1.MoveNext
        DoEvents
        Wend
    End If
    
    Rs1.Close
    Rs2.Close
    
    Set db = Nothing
    Set Rs1 = Nothing
    Set Rs2 = Nothing
    
    DoCmd.OpenTable "Temp_Sum_T"
    MsgBox "تم جمع كل السجلات"

HandleExit:
Exit Sub

HandleError:
If Err.Number = 0 Then
    Resume Next
Else
MsgBox Err.Number & vbNewLine & vbNewLine & Err.Description
End If
Resume HandleExit

End Sub

لحذف الحسابات السابقة وإعادة الحساب من جديد تضغط على الزر :

image.png.b9a7d14072e50fb23725213e81678c17.png

الملف :

Sum Them All - Moosak.accdb

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

السلام عليكم ورحمة الله وبركاتة اخر Moosak

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

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

بعد اذنك طبعا .... اول نقطة ضغطت على الزر الكود لا يعمل يبدو ان بة مشكلة بسيطة او اى شىء لا أعلمة 

ثانى نقطة لكل سجل من الجدول الاساسى اضافت حقل يسمى GSM احتاج الفرق ما بينهم ( نسبة مئوية )وهو حقل واحد وليس 4 حقول كما السابق بمعنى اذا كان مثلا 6001 ال gsm الخاص بة 414  و 6199 ال gsm الخاص بة 450 فما أحتاجة هو الفرق ما بينهم وهو 36 مقسوم على GSM الاكبر وهو 450 ليكون 8% فى هذة الحالة 

 

اسف على الإطالة لكن حضرتك اللى فتحت نفسى ان الموضوع يكمل معايا

Sum Them All - Moosak.rar

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

4 ساعات مضت, esam munir said:

اول نقطة ضغطت على الزر الكود لا يعمل يبدو ان بة مشكلة بسيطة او اى شىء لا أعلمة 

هذه والله أعلم بسبب أنك لم تضغط على [تمكين] في الشريط الأصفر الذي يظهر لك في الأعلى أول ما تفتح الملف .. 🙂 

4 ساعات مضت, esam munir said:

اضافت حقل يسمى GSM

وبالنسبة لهذه .. فهاك ما طلبت (فقط تأكد من صحة العملية الحسابية) : 🙂 

image.png.78e1ffd021665013a2b77c3c1632999e.png

الملف :

 

‏‏Sum Them All 2.1 - Moosak.accdb

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

image.png.10990aaea25c47cf4b059ed1960024cd.png

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

وبخصوص ال GSM ممتاز والله تسلم إيدك

 

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

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

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

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

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

3 ساعات مضت, esam munir said:

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

العفو أخي العزيز 😊🌼

3 ساعات مضت, esam munir said:

واقول لحضرتك الخطوة الجاية اية لو هيكون فية حاجة

طبعا هذه الخطوة ستضعها في موضوع جديد إن شاء الله ( حسب القوانين ) 😉👌🏻

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

طيب معلش اخى واستاذى الفاضل Moosak ممكن بس هذة الخطوة هنا لإرتباطها الشديد بذات الموضوع 

المطلوب هو ان النتائج اللى حضرتك اظهرتها بإستثناء عمود GSM اى اننى اقصد نتائج Result 1 حتى Result 4 هذة النتائج اطلب طرحها من سجلات حقل Psize  ولكن بشروط ودعنى اعطى حضرتك بعض الامثلة 

عل سبيل المثال 

النتيجة الاولى 110 ارجو طرحها من سجلات جدول Psize ولكن ليست كل سجلات جدول psize وانما سجل واحد متغير وهو السجل الذى قيمتة الاكبر منة مباشرة فقط دون باقى السجلات بمعنى ان نتيجة 110 يجب ان تطرح من سجل 130فى psize وبالتالى تكون النتيجة فى حقل يسمى Trim هى ((130-110)/130) *100 ليصبح شكل الجدول الجديد حقل نسبة ال GSM واربعة حقول نتائج تجميع السجلات وحقل لل Trim

 

حاسس انى مش قادر اوضح المطلوب بالظبط لكن إعتقادى أن حضرتك فاهم المطلوب ان شاء الله 

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

 

pSize
size
104
105
106
115
128
130
135
140
144
145
150
151
155
160
168
170
177
180
182
185
 
No m m2 GSM Operation1 Result1 Operation2 Result2 Operation3 Result3 Operation4 Result4
307 6341 6200 35.31% split1 + split1 110 split1 + split2 147 split1 + split3 184 split1 + split4 221

test.rar

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

منذ ساعه, esam munir said:

بمعنى ان نتيجة 110 يجب ان تطرح من سجل 130فى psize

تمام أخي عصام .. ولكن المرة القادمة ضع كل استفساراتك مرة واحدة في أول المشاركة 😉👌

طبعا هذه الخطوة تعمل في استعلام هذه المرة .. لكن هناك استفسار :

ليش ال 110 تطرح من 130 وليس 115 حسب التسلسل في جدول psize ؟

الرقم الذي أكبر من 110 مباشرة هو 115 وليس 130 ؟! 

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

حاضر بإذن الله فى المرة القادمة طبعا سأفعل ذلك ولكنى توقعت صعوية فهم الموضوع بهذة المراحل ولكن ان شاء الله فى المرات القادمة سأفعل ذلك بإذن الله

 

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

فلا مانع من ظهور النتايج حاليا فى هذا المثال على 115 ولكن النتائج ارجو ان تتغير مع التغيير فى جدول psize

 

وبعتذر من حضرتك مرة اخرى

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

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

أخي عصام أشتغلت حسب الوصف .. ولكن ظهرت إشكاليات تتطلب تدخلك فيها 😅🖐

وهي أنه بعض النتائج لايوجد لها قيمة مقابلة في جدول pSize أعلى منها .. لذلك جعلت مقابلها صفر ( أنظر الأعمدة : size4, size3, size2, size1 ) ..

والمعادلة التي وضعتها تقسم ناتج الطرح على قيمة الـ size .. فعندما تكون القيمة تساوي صفر لايمكن القسمة على الصفر .. لذلك استبدلتها بالواحد (1) لكي لا تظهر أخطاء ..

لكن النتيجة طبعا ستكون خطأ .. :rol:

المهم هاك الملف ، وعدل على المعادلات بما تراه مناسبا 🙂

 

image.png.3dd5ef282a3320bea3e3d76ff78203d7.png

 

الملف :

test.accdb

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

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

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



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

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

Important Information