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

تجميع حقول سجلات في سجل واحد


outnet
إذهب إلى أفضل إجابة Solved by منتصر الانسي,

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

اخواني ارجو المساعدة في المشكل الحالي

لدي قاعدة بها جدول يتضمن محموعة من الاسماء و الرموز

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

مثلا الاشخاص الدين لهم الرمز 10 يكون المقابل لها هو "محمد بدر"-"علي نور"-"خالد مصطفى"-"أحمد رشيد"

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

المرفق يتضمن القاعدة base.zip

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

يا سلام عليك

شيء جميل حقا

وانما استوقفني هذا السطر وهذا اللفظ اطويل الذي بداخله ،

If rs.AbsolutePosition = rs.BOF Then

وأيضا عبارتي BOF و EOF

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


Public Function Horizontal(tabelle As String, Feld1 As String, Feld2 As String, valFeld1)

  Dim DB As Database, rs As Recordset

  Set DB = CurrentDb

  Set rs = DB.OpenRecordset("select distinct " & Feld2 & " from " & tabelle _

    & " where " & Feld1 & "='" & valFeld1 & "' order by " & Feld2)

    Do

    If rs.AbsolutePosition = rs.BOF Then

    Horizontal = rs(Feld2)

    Else

    Horizontal = Horizontal & ", " & rs(Feld2)

    End If

   rs.MoveNext

  Loop Until rs.EOF

   rs.Close

  DB.Close

  Set rs = Nothing

  Set DB = Nothing

  End Function

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

وتقبل تحياتي

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

تكرم عينك اخي ابوخليل

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

ولكن من بساطتها يمكن فهمها بسهولة... والان الى الشرح

Public Function Horizontal(tabelle As String, Feld1 As String, Feld2 As String, valFeld1)
هذا سطر تعريف الدالة ومتغيراتها والتي تتمثل في اسم الجدول او الاستعلام , اسم الحقل المراد التجميع بحسبه , اسم الحقل الذي سيتم تجميعه , اسم الحقل الذي سيرتبط به حقل التجميع (وأعتقدانه يمكن فهمها اكثر من واقع المثال)
Dim DB As Database, rs As Recordset

  Set DB = CurrentDb

هنا يتم تعريف متغيرين الأول من نوع Database أي قاعدة بيانات (وجعلناها قاعدة البيانات الحالية التي نعمل بها) والثاني rs من نوع Recordset وهذا النوع من المتغيرات وبشكل مبسط يمكن تعريفه كأنه جدول أو إستعلام
Set rs = DB.OpenRecordset("select distinct " & Feld2 & " from " & tabelle _

    & " where " & Feld1 & "='" & valFeld1 & "' order by " & Feld2)

هنا اسندنا للمتغير rs جملة SQL التي تمثل مصدر بياناته
Do

    If rs.AbsolutePosition = rs.BOF Then
هذه بداية الحلقة التكرارية التي ستتنقل بين سجلات الـ Recordset ثم تقوم جملة IF هنا بإختبار ما إذا كان موقع السجل الحالي (AbsolutePosition) في بداية (BOF) الـ Recordset
Horizontal = rs(Feld2)
عندها يجعل النتيجة تمثل قيمة الحقل المجمع

    Else

    Horizontal = Horizontal & ", " & rs(Feld2)

    End If
وإلا تكون النتيجة هي قيم الحقل المجمع في السجلات السابقة مضافاً اليها الفاصلة (ويمكن تعديلها بما تشاء) ثم قيمة الحقل المجمع للسجل الحالي
rs.MoveNext
الإنتقال للسجل التالي
Loop Until rs.EOF
إختبار ما إذا وصلت الحلقة التكرارية إلى آخر سجل (EOF) في الـ Recordset
   rs.Close

  DB.Close

  Set rs = Nothing

  Set DB = Nothing

  End Function

عندها يتم إغلاق الـ Recordset و الـ DB

وتصفية الذاكرة من أي قيم محفوظة فيها وإنهاء الدالة

هذا شرح مبسط فأرجو أن يكون واضح

تحياتي,,,

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

سلمت يمينك اخي منتصر

انا لدي تعليق تفاهمي اذا سمحتم لي

انا احترم الامانة العلمية

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

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

انا عندي (تعلمت هذا التطبيق من منتصر الانسي ، ولا يهمني من اين اتى به، فالتطبيق و ادراك كيفية الاستخدام يدخلك في قائمة الملكية) فان تذكرت المصدر التسلسلي للمعلومة ، واحببت ان يذكره ،،، فشكرا ، والا فالامر ليس ذو اهمية

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

اخي منتصر الحبيب

بأعلاه علم تعلمناه عنك ، يسند اليك ، ولك به الفضل ، ونفتخر بك وبه ، وانت مبدع ولست بناقل.

وشكرا

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

اخي العزيز

جزاك الله كل خير على الكلام الجميل وكما تقول دائماً مانحن الا طلبة علم نعلم ونتعلم من بعضنا

وانا معك في كل ماقلته ولكن ذكري للمصادر هو من باب تكريم صاحب الفكرة ولأضع نفسي في مكاني الصحيح :smile: .

تحياتي,,,

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

  • 9 months later...
  • 3 months later...

ممكن طلب بصراحة انا حاولت اعدل الكود ليناسبني معرفتش والله ...الاستعلام بتاعي اسمه الاقرارات .. الكود اللي عايز اجمع PRID .... وعايز اجمع FullName ممكن حضرتك توضح للمبتدئ مثلي اي الاماكن بالظبط تغير ياريت هاي لايت علي الاماكن التي لابد ان تغير لتصلح لاي استخدام

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

ممكن طلب بصراحة انا حاولت اعدل الكود ليناسبني معرفتش والله ...الاستعلام بتاعي اسمه الاقرارات .. الكود اللي عايز اجمع PRID .... وعايز اجمع FullName ممكن حضرتك توضح للمبتدئ مثلي اي الاماكن بالظبط تغير ياريت هاي لايت علي الاماكن التي لابد ان تغير لتصلح لاي استخدام

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

  • 5 months later...
  • 6 years later...
On 3/30/2011 at 6:12 PM, منتصر الانسي said:

تكرم عينك اخي ابوخليل

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

 

ولكن من بساطتها يمكن فهمها بسهولة... والان الى الشرح

 

 

 

Public Function Horizontal(tabelle As String, Feld1 As String, Feld2 As String, valFeld1)

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

 

Dim DB As Database, rs As Recordset

  Set DB = CurrentDb

هنا يتم تعريف متغيرين الأول من نوع Database أي قاعدة بيانات (وجعلناها قاعدة البيانات الحالية التي نعمل بها) والثاني rs من نوع Recordset وهذا النوع من المتغيرات وبشكل مبسط يمكن تعريفه كأنه جدول أو إستعلام

 

Set rs = DB.OpenRecordset("select distinct " & Feld2 & " from " & tabelle _

    & " where " & Feld1 & "='" & valFeld1 & "' order by " & Feld2)

هنا اسندنا للمتغير rs جملة SQL التي تمثل مصدر بياناته

 

Do

    If rs.AbsolutePosition = rs.BOF Then

هذه بداية الحلقة التكرارية التي ستتنقل بين سجلات الـ Recordset ثم تقوم جملة IF هنا بإختبار ما إذا كان موقع السجل الحالي (AbsolutePosition) في بداية (BOF) الـ Recordset

 

Horizontal = rs(Feld2)

عندها يجعل النتيجة تمثل قيمة الحقل المجمع

 

    Else

    Horizontal = Horizontal & ", " & rs(Feld2)

    End If

وإلا تكون النتيجة هي قيم الحقل المجمع في السجلات السابقة مضافاً اليها الفاصلة (ويمكن تعديلها بما تشاء) ثم قيمة الحقل المجمع للسجل الحالي

 

rs.MoveNext

الإنتقال للسجل التالي

 

Loop Until rs.EOF

إختبار ما إذا وصلت الحلقة التكرارية إلى آخر سجل (EOF) في الـ Recordset

 

   rs.Close

  DB.Close

  Set rs = Nothing

  Set DB = Nothing

  End Function

 

 

عندها يتم إغلاق الـ Recordset و الـ DB

 

وتصفية الذاكرة من أي قيم محفوظة فيها وإنهاء الدالة

 

هذا شرح مبسط فأرجو أن يكون واضح

 

تحياتي,,,

جزاك الله خيرا استاذنا .. كيف يمكنني اضافة اكتر من متغير .. بمعني اريد اضافة اكتر من شرط للتجميع

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

  • 5 months later...
زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

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

Important Information