![]() |
|
[سؤال] عمل فيوز في sqlserver - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183) +--- الموضوع : [سؤال] عمل فيوز في sqlserver (/showthread.php?tid=17860) |
عمل فيوز في sqlserver - اليوم مبتدئة وغداً محترفة - 31-10-16 بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
منذ أكثر من شهر وأنا احاول أعمل فيوز في sql server لثلاثة جداول بس ما قدرت
![]() 1.جدول العملاء
رقم العميل| اسم العميل| وباقي بيانات العميل
2. جدول الفواتير:
رقم الفاتورة | نوع الفاتورة | طريقة الدفع | رقم العميل| المبلغ الإجمالي | وباقي بيانات الفاتورة
3.جدول السندات:
رقم السند | نوع السند| طريقة الدفع | رقم العميل | رقم الفاتورة المراد دفع السند لحسابها (للفواتير الآجلة) | وباقي بيانات السند
((((طبعا العميل يقدر يقول ابغى ادفع المبلغ عن (الفاتورة رقم) فيتم إدخاله في حقل رقم الفاتورة في جدول السندات وإلا يتم إدخال 0 عوضا عن ذلك في حالة كان السند لغرض غير سداد قيمة فاتورة))))
المشكلة اني عندما عملت الفيوز اظهر لي فقط البيانات اللي مسجلة في جميع الجداول
يعني اذا فيه سند ومسجل في حقل رقم الفاتورة حقه رقم فاتورة يظهر معي في الفيو
لكن إذا فيه سند وحقل رقم الفاتورة حقه مسجل فيه (0) عندها لا يظهر في الفيو
بينما السندات التي رقم العميل فيها 0 (أي غير مرتبطة بعميل محدد) تظهر في الفيو
((((((تلخيص المشكلة))))))
جدول العملاء
الرقم | الاسم 1 | محمد 2 | علي 3 | خالد جدول الفواتير: رقم الفاتورة | رقم العميل 1 | 1 2 | 2 3 | 3 4 | 1 جدول السندات رقم السند | رقم العميل | رقم الفاتورة 1 | 2 | 2 2 | 1 | 0 هذه الجداول باختصار جميع البيانات في الجداول تظهر إلا في الحالة الأخيرة في جدول السندات لأن رقم الفاتورة (0) (المفروض تطلع عدد السجلات في الفيو=6 سجلات لكن في هذه الحالة تطلع فقط 5) يارب أكون قدرت أوصل مشكلتي
وبعد محاولات واستشارات الاخوة الاعضاء توصلنا إلى هذا الكود عوضا عن استخدام الفيو لكن لا يزال (يحتاج تعديل)
كود : select * from vouchers full join bills on vouchers.bill_id=bills.bill_id full join suppliers on bills.supplier_id = suppliers.supplier_no and suppliers.supplier_no = vouchers.supplier_noوللجميع شكري وتقديري
RE: عمل فيوز في sqlserver - أبو عمر - 31-10-16 أولاً: تعبك في تلوين الخط للايضاح ومحاولة الشرح اصعب بكثير من اللي مطلوب من الاستعلام يعني امر الاستعلام ابسط من اعداد السؤال ثانيا لا نحتاج لعمل استعلام في قاعدة البيانات في مثل هذه الحالة الامر بسيط فقط جملة استعلام عند الحاجة لنأخذ رقم العميل من جدول العملاء مع رقم العميل في جدول الفواتير ونأخذ رقم الفاتور الاساسي مع رقم الفاتورة الفرعي في جدول السندات. السطر السابق يعتبر استعلام Viewer لمعرفة سندات العميل فقط سنأخذ رقم العميل من جدول العملاء مع رقم العميل في جدول السندات وسنهمل الفواتير الان لو استعرض بيانات من الثلاث جداول PHP كود : SELECT ولو من الجدول والثاني فقط PHP كود : SELECT من الثاني والثالث PHP كود : SELECT من الاول والثالث PHP كود : SELECT طبعا في كل جمل Select السابقة لم اذكر اي حقول مختارة لانك ستضع او تختار ما يهمك من الحقول Cid مفتاح ثانوي للعميل Bid مفتاح ثانوي للفواتير الجدول t1 للعملاء\ t2 للفواتير t3 للسندات ومن البديهي ان السند الذي يحمل رقم فاتور 0 فانه لن يتبع لاي فاتورة وبالتالي الفاتورة لن تتبع لاي عميل نصيحة: في المرات القادمة اعمل مثال بسيط للمشكلة افضل من محاولة التوضيح بالكتابة بالتوفيق RE: عمل فيوز في sqlserver - اليوم مبتدئة وغداً محترفة - 31-10-16 (31-10-16, 04:55 AM)أبو عمر كتب : أولاً: تعبك في تلوين الخط للايضاح ومحاولة الشرح اصعب بكثير من اللي مطلوب من الاستعلام يعني امر الاستعلام ابسط من اعداد السؤال الأستاذ الفاضل أبو عمر أشكر لك تجاوبك معي وبارك الله فيك وفي علمك للأسف الاستعلام لم يحل مشكلتي مشكلتي تتلخص في أن السندات التي لا يوجد لها فواتير ولكن لها عملاء جدول العملاء الرقم | الاسم 1 | محمد 2 | علي 3 | خالد جدول الفواتير: رقم الفاتورة | رقم العميل 1 | 1 2 | 2 3 | 3 4 | 1 جدول السندات رقم السند | رقم العميل | رقم الفاتورة 1 | 2 | 2 2 | 1 | 0 هذه الجداول باختصار جميع البيانات في الجداول تظهر إلا في الحالة الأخيرة في جدول السندات لأن رقم الفاتورة (0) (المفروض تطلع عدد السجلات في الفيو=6 سجلات لكن في هذه الحالة تطلع فقط 5) RE: عمل فيوز في sqlserver - أبو عمر - 31-10-16 الواجب ان لا يكون رقم الفاتورة صفر اساسااااااااااا كيف يتم كتابة سند لفاتورة ليس لها وجوووود ماهو هذا سبب المشكلة RE: عمل فيوز في sqlserver - myalsailamy - 31-10-16 اعتقد ان كلام الاخ عمر في محله في خصوص الترقيم و لكن لنأخذ المنحنى الخاص بك و نتجاهل القوانين و نحاول حل المشكله ، لدينا هنا ثلاثة جداول الجدول الاساسي منها هنا هو جدول العملاء و هذا شيء جيد اي مضمون تظهر نتائج بناءاً على بيانات هذا الجدول ، ننتقل الى الجزء الاخر وهو كيف سنقوم في حالة ان الفاتوره رقم السند بها هو صفر لنجعلها تظهر في نتائج الاستعلام !! ، نصل الى استنتاج وهو أن نطلب من الكويري المنفذه ان لا تهتم بجدول السندات الا اذا كانت قيمته اعلى من الصفر ، بمعنى أخر اذا كان رقم السند أكبر من الصفر فأتي بمعلومات السند ، غير ذلك أرجع لي قيمه فارغه و لا تلغي الفاتوره لانه ليس لها سند ، طبعا هذه المشكله تحل باستخدام LEFT JOIN ومعناها اعتمد بشكل الاساسي على الجدول الذي بيسار الاستعلام ، بدلاً عن INNER JOIN التي لابد من توفر البيانات في الجدولين ، في هذا الموضوع يتضح لك الفرق بين هذين النوعين : - LEFT JOIN http://www.w3schools.com/sql/sql_join_left.asp -INNER JOIN http://www.w3schools.com/sql/sql_join_inner.asp انظري الى الصورة التي بالروابط و ان شاء الله ستفهمي الفرق بينها RE: عمل فيوز في sqlserver - اليوم مبتدئة وغداً محترفة - 31-10-16 (31-10-16, 07:21 AM)أبو عمر كتب : الواجب ان لا يكون رقم الفاتورة صفر اساسااااااااااا يمكن أن يكون السند مرتبط بفاتورة (في حال كان دفعة من فاتورة آجلة) ويمكن أن يكون السند غير مرتبط بفاتورة (لأي غرض آخر غير بيع وشراء المنتجات) (31-10-16, 09:32 AM)myalsailamy كتب : اعتقد ان كلام الاخ عمر في محله في خصوص الترقيم و لكن لنأخذ المنحنى الخاص بك و نتجاهل القوانين و نحاول حل المشكله ، لدينا هنا ثلاثة جداول الجدول الاساسي منها هنا هو جدول العملاء و هذا شيء جيد اي مضمون تظهر نتائج بناءاً على بيانات هذا الجدول ، ننتقل الى الجزء الاخر وهو كيف سنقوم في حالة ان الفاتوره رقم السند بها هو صفر لنجعلها تظهر في نتائج الاستعلام !! ، نصل الى استنتاج وهو أن نطلب من الكويري المنفذه ان لا تهتم بجدول السندات الا اذا كانت قيمته اعلى من الصفر ، بمعنى أخر اذا كان رقم السند أكبر من الصفر فأتي بمعلومات السند ، غير ذلك أرجع لي قيمه فارغه و لا تلغي الفاتوره لانه ليس لها سند ، طبعا هذه المشكله تحل باستخدام LEFT JOIN ومعناها اعتمد بشكل الاساسي على الجدول الذي بيسار الاستعلام ، بدلاً عن INNER JOIN التي لابد من توفر البيانات في الجدولين ، في هذا الموضوع يتضح لك الفرق بين هذين النوعين : جربت left join وما عطتني النتيجة اللي ابغاها لكن بالصدفة وجدت شي اسمه full join وقربني جدددا من النتيجة اللي ابغاها كود : select * from vouchers full join bills on vouchers.bill_id=bills.bill_id full join suppliers on bills.supplier_id = suppliers.supplier_no and suppliers.supplier_no = vouchers.supplier_noهذا الكود اللي وصلت له بعد محاولات عديدة وطوييييييييييلة بس ما عطاني الغرض اللي ابغاه تماما اتمنى لو احد يساعدني ويعدله RE: عمل فيوز في sqlserver - ممدوح - 01-11-16 ممكن تضعي قاعدة البيانات ولو تكون Script بالبيانات يكون أفضل عشان نتلاشي اختلاف الاصدار وممكن تضعي صورة للنتائج المراد إظهارها ولو بشكل ورقة اكسل عشان المطابقة لأن بالشكل اللي بيدور فيه الموضوع بدول مثال أو قاعدة بيانات مرفقة اعتقد المسألة حتطول RE: عمل فيوز في sqlserver - myalsailamy - 01-11-16 استخدميها بهذا الشكل كود : SELECT suppliers.supplier_no, vouchers.bill_id, vouchers.supplier_no AS supplier_no2ومعناه اظهر جميع السندات التي تحوي فواتير و التي بدون الفواتير Full Join أو Outer Join لا تحل مشكلتك لانها راح تظهر كل شيء في كلا الجدولين و لكن في حالتك هناك جدول فقط اريده ان يظهر اجباري (السندات) و الجدول الاخر (الفواتير) اختياري ، اي ان وجد بيانات في الفواتير قام بعرضها وان لم يجد لا يعرضها RE: عمل فيوز في sqlserver - اليوم مبتدئة وغداً محترفة - 01-11-16 (01-11-16, 01:22 AM)ممدوح كتب : ممكن تضعي قاعدة البيانات ولو تكون Script بالبيانات يكون أفضل عشان نتلاشي اختلاف الاصدار لا اعرف كيف ارفق قاعدة البيانات ولا اعرف كيف اضيف صورة في الرد (01-11-16, 01:46 AM)myalsailamy كتب : استخدميها بهذا الشكل للأسف ما ضبط معي الكود !!! RE: عمل فيوز في sqlserver - أبو عمر - 01-11-16 ابسط الحلول اجعلي جدول لسندات الفواتير وجدول سندات اخر للسندات التي لا تتعلق بالفواتير وهنا ترتاحين من همّ جمل الاستعلام وربكتها
|