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

مساعدة في الاستعلامات و التقارير

مغلق
بدأه ahmedbadr في 6 مارس 2006 · 8 رد · 956 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني في الفريق العربي للبرمجة

السلام عليكم ....

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

واجهتني مشكلة في قاعدة بيانات أقوم بتنفيذها وهي للمهام حيث أن لدي عناوين رئيسية و عناوين فرعية و العناوين الفرعية تحتها بنود و البنود لها بنود فرعية ..

لأكون أوضح سأقوم بكتابة مثال كاتالي :-

إسم المشروع :- 1- مشروع مستشفي أم القري

1-1 البناء

1-1-1 أعمال الحفر

1-1-1-1 الاتفاق مع شركة حفر

1-1-1-2 إمضاء العقد مع شركة الحفر

1-1-1-3 بدء أعمل الحفر

1-1-2 صب الخرسانة

1-2 الكهرباء

و هكذا كما ترون من المثال فقمت بإنشاء جدول لكل تفريعة حتي يمكن روئيتهم في شجرة كما في الملف المرفق نموذج task

المشكلة :-

1- حاولت أن أقوم بعمل إستعلام مجمع يحضر كل البيانات الخاصة بكل مشروع فلم يقم سوي بإحضا مشروع واحد

2 - التقارير تقوم بعمل نفس الشيء لا تحضر سوي بيانات مشروع واحد فقط .

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

أخوكم في الله

أحمد بدر

tasknew.rar

#2

أرجو المساعدة من اخواني

يا ريت حد يوجدلي حل للمشكلة دي

أحمد بدر

#3

اخي احمد

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

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

اخوكم

ابو آدم

#4

أخي nart lebzo

لقد قمت بعمل جدول رئيسي إسمه task و تحته جدول صب و تحته جدول صب 2 و تحته جدول صب 3 بحيث يكون كل جدول مرتبط بالجدول الذي يليه بحيث يعرض فقط البيانات المرتبطة به تحته .

أرجو أن أكون أوضحت

لقد قمت بتعبئتها ببعض البيانات فحدد أي الجدول تريد أن يكون فيه بيانات

أحمد بدر

tasknew.rar

#5

السلام عليكم

اخي احمد

ان كنت قد ادركت حاجتك ، ... فقد انشأت نموذجا يعرض لك جميع المشاريع و ما يلحق بها من معلومات و انشأت نموذجا آخرتحدد به ID المشروع الذي تريد فيظهر لك معلومات المشروع المختار

هذا مبدئيا ... اذا كانت هذه هي حاجتك يمكن ان نطور النماذج بالطريقة التي تتماشي مع ما تريد

والله من وراء القصد

ونحن في العون ما استطعنا

اخوكم

ابو آدم

tasknew.rar

#6

خذ هذا الاستعلام المبني على بياناتك أيضاً... قد يكون الخلل في عدم استعمالك Left Join...

tasknew.rar

#7

أخي أحمد مبارك و أخي nart lebzo

بارك الله فيك هذا هوا ما اريده و هذا لا ينقص من مجهود أخينا nart lebzo و جزاكم الله عني خيرا ..

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

أرجو منك شرح ما هيا Left Join حتي لا أقع في نفس الخطأ مرة أخري حتي يمكنني حل المشكلة إذا قابلتني مرة ثانية ..

و حتي تعم الفائدة ....

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

أحمد بدر

#8

بسم الله...

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

FROM table1 X JOIN table2 ON table1.common_field = table2.common_field

table1 هو الجدول الأول، وtable2 طبعاً هو الجدول الثاني... common_field هو اسم الحقل المشترك بينهما، أما X هذه فقد تكون:

1. INNER: أنت بهذا تأمر الأكسس بأن يربط بين الجدولين (يجمع حقول الجدول الأول إلى جانب حقول الجدول الثاني في سطر واحد) بناء على تساوي القيم في الحقلين المشتركين، وليس هذا فقط... بل (وهو بيت القصيد) أن لا يحضر أي صف من الجدول الأول في النتيجة إلا إذا وجد في الحقل المشترك ما يساويه في الجدول الثاني، والعكس صحيح: يجب أن يكون لأي صف يظهر في النتيجة من الجدول الثاني ما يساويه في قيمة الحق المشترك من الجدول الأول (انتظر المثال إذا لم تفهم هذا...).

2. LEFT: هنا أيضاً تتم عملية الربط بناء على تساوي قيم الحقل المشترك في الجدول الأول والثاني، ولكن الفرض هنا أن يظهر في نتيجة الاستعلام كل صفوف الجدول الأيسر (Left) وهو الجدول الأول. هذه الصفوف تحوي في الحقل المشترك على قيم، الآن أحضر من الجدول الثاني فقط الصفوف التي تساوي قيم حقلها المشترك القيم في الجدول الأول...(أيضاً انتظر المثال؛ فبالمثال يتضح المقال).

3. RIGHT: أظن هذا مفهوماً... اشترط هنا أن يحضر صفوف الجدول الثاني (الأيمن Right) كلها بغض النظر عن وجود صفوف في الجدول الآخر تتساوى معها في قيم الحقل المشترك...(لا، لا تنتظر أكثر، فالمثال في السطر التالي مباشرة...).

افرض أن لديك جدولين: واحد للطلاب، والآخر يرتبط فيه كل طالب بهواية أو أكثر... بعض الطلاب ليس لديهم هوايات، وبعض الهوايات لا يرتبط بها أي طالب (كالقراءة مثلاً :) )...

أنت تريد أن تظهر في استعلام واحد الطلاب مع هوايات كل منهم...

إذا استخدمت INNER JOIN فأنت تقول للأكسس: أحضر في النتيجة فقط الطلاب الذين لديهم هوايات، والهوايات التي ترتبط بطلاب؛ الطلاب الذين ليس لديهم هوايات لن يظهروا، والسبب أن الحقل المشترك بين الجدولين هو رقم الطالب، ولكن رقم الطالب في الجدول الأول (الطلاب) لا يجد ما يساويه في حقل رقم الطالب في جدول الهوايات (لأن الطالب ليس لديه هوايات: بدأنا نكرر...)، وبالمثل الهوايات التي لا يرتبط بها أي طالب حقل رقم الطالب فيها خالي...

أما إذا استخدمت LEFT JOIN فهذا معناه أنك تريد كل الطلاب، وفقط الهوايات التي ترتبط بطلاب... فكر فيها هكذا: أحضر كل صفوف الطلاب، ثم اختر من جدول الهوايات فقط الصفوف التي تحوي في حقل رقم الطالب على رقم طالب...

وطبعاً، RIGHT JOIN تحضر كل الهوايات بغض النظر عن وجود طلاب مرتبطين بها أم لا، و تحضر بيانات الطلاب الذين لهم هوايات (يتساوى حقل رقم الطالب في جدول الهوايات مع حقل رقم الطالب في جدول الطلاب)...

أرجو أن تكون الفكرة قد وصلت، وإن لم تصل بعد، فتأمل أكثر قليلاً، وإلا فلا تتردد في الاستفسار...

ملحوظة: المثال مبسط لتوضيح الفكرة، وإلا فالصورة المثلى للطلاب وهواياتهم تكون بثلاثة جداول: واحد للطلاب، والثاني لبيانات الهوايات، والثالث لربط كل طالب مع هواية (حقلان: رقم الطالب ورقم الهواية).

ملحوظة أخرى أقرب للموضوع: إذا فهمت الشرح السابق، فتفكر في حالتك... task قد يرتبط مع sub1 في صف ما (مثلاً يوجد في جدول task القيمة 1 في حقل task_id وكذلك توجد القيمة 1 في حقل task_id في جدول sub1 وقيمة sub1_id في هذا الصف 3)، ولكن... افرض أنه ليس هناك في جدول sub2 وفي حقل sub1_id أي سطر بالقيمة 3، فإن استخدام INNER يحتم عدم ظهور أي من بيانات الجداول الثلاثة، لأن هذه الكلمة تشترط وجود قيم متساوية في الحقول المشتركة بين الجداول: صحيح task وsub1 فيهما قيم متساوية في الحقول المشتركة، ولكن sub1 وsub2 ليسا كذلك، فلن يظهر sub1 وبالتالي لن يظهر task... أرجو أن تفكر فيها قليلاً. Left تقول باختصار: حسناً، أظهر كل صفوف task، وما يرتبط بها من صفوف sub1، وناتج هذا الارتباط أظهره كله مع ما يرتبط به من صفوف sub2 وهكذا... فالشرط أن يظهر كل ما في اليسار ولا يشترط أن توجد قيم متساوية في الحقول المشتركو على طول الخط...

ملحوظة أخيرة: في انتظار الاستفسار (إن وجد :) ).

#9

السلام عليكم

جزيت خيرا أخي احمد مبارك ... نفع الله بعلمك

وشكرا لك

اخوكم

ابو آدم

هذا الموضوع مغلق.

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

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

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

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

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