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

أرجوا المساعدة في الحصول على الاستعلام المناسب

بدأه المبرمج عبدالكريم في 14 أغسطس 2008 · 3 رد · 1,055 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني الاعزاء ...

لنفرض ان لدينا جدولين ..

الاول : البنود (اصناف بضائع مثلا) , نسميه table1

الحقول : رقم البند (id) , اسم البند (i_name)

السجلات :

1 بند1

2 بند2

3 بند3

الثاني : حركة بيع وشراء الاصناف (الاستيراد والتصدير) , نسميه table2

الحقول : رقم البند(id) , نوع العملية(بيع او شراء)(type) , الكمية(qua)

السجلات :

1 شراء 1000

1 شراء 500

2 شراء 2500

1 بيع 800

المطلوب : كود SQL يقوم بحساب الكمية للحالية لجميع البنود ...

نلاحظ من السجلات المدخلة أن :

كمية البند رقم 1 (بند1) هي 1000+500-800=700

كمية البند رقم 2 (بند2) هي 2500-0=2500

كمية البند رقم 3 (بند3) هي 0-0=0

كيف يتم ذلك برمجيا بواسطة SQL؟

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

الفكرة اللي عملت عليها هي :

انشأت استعلام(q1) يظهر رقم البند من table2 و مجموع الكمية من table2 بشرط أن النوع شراء

هكذا :

 SELECT table2.id,sum(table2.qua) FROM table2 WHERE table2.type="شراء" group by table2.id

وكذلك استعلام q2 كالسابق ولكن النوع بيع

SELECT  table2.id,table2.type,sum(table2.qua)  FROM table2 WHERE table2.type="بيع"  group by table2.id

وبعد ذلك عملت استعلام يقوم بعملية الطرح لكل بند من الاستعلام q1 و q2

هكذا :

SELECT q1.i_id,(q1.SumOfqua-q2.SumOfqua) as t_qua  FROM q1 inner join q2 on q1.i_id=q2.i_id;

هكذا اكون حصلت على المطلوب ((ولكن...))

لن تظهر الا كمية (بند1) ؟؟؟ لماذا ؟؟ السبب هو لان له علمية شراء وبيع .. ام البقية لا .. لانها لها عملية شراء فقط او بدون عملية شراء او بيع...

المطلوب : كيف اجعل جميع البنود تظهر , بحيث ان التي ليس لها اية عملية بيع(شراء فقط) : يظهر مجموع الشراء (او مجموع الشراء - 0=مجموع الشراء) , والتي لم يتم فيها عملية الشراء ولا البيع : يظهر 0 او (0-0=0)

اتمنى ان اجد لديكم الحل .. وآسف على التطويل ولكن لاسهل وأوضح لكم مشكلتي بالتفصيل ...

علمااااااا : باني اريد جميع الاكواد SQL فقط ... وشكرا مقدما

وجزاكم الله خير الدنيا والاخرة

تم تعديل هذه المشاركة بواسطة المبرمج عبدالكريم في 14 أغسطس 2008 في 22:16

#2

السلام عليكم

قم بعمل استعلام فى الاكسيسس لتسيهل المهمة :)

اليك كود مثال كنت قمت بكتابتة من فترة

	If IsNumeric(TextBox1.Text.Trim) = True And TextBox1.Text.Trim <> "" Then

			Try
				Dim adp As OleDbDataAdapter = New OleDbDataAdapter
				Dim cmdP As New OleDbCommand
				Dim dsP As New DataSet
				Dim dsS As New DataSet

				cmdP.CommandType = CommandType.Text
				cmdP.CommandText = "SELECT InvoicePID,DateOfInvoice,SupplierName,Quantity,Price FROM QuerySTATEMENT1 WHERE ProductID =" + TextBox1.Text.Trim + " ORDER BY DateOfInvoice,InvoicePID"

				TextBox1.Text & "%'"

				adp.SelectCommand = cmdP
				cmdP.Connection = CON
				dsS.Clear()
' QuerySTATEMENT1 هذا استعلام للفاتورة
				adp.Fill(dsS, "QuerySTATEMENT1")
				cmdP.CommandText = "SELECT ProductID,ProductName,Price,Quantity,ProductClass,ProductTypeName,SupplierName FROM Product WHERE ProductID =" + TextBox1.Text.Trim
				dsP.Clear()
				adp.Fill(dsP, "Product")

				If dsS.Tables("QuerySTATEMENT1").Rows.Count > 0 Then

					TextBox2.Text = dsP.Tables("Product").Rows(0).Item("ProductID")
					TextBox8.Text = dsP.Tables("Product").Rows(0).Item("Quantity")
					TextBox6.Text = dsP.Tables("Product").Rows(0).Item("ProductClass")
					TextBox7.Text = dsP.Tables("Product").Rows(0).Item("SupplierName")
					TextBox4.Text = dsP.Tables("Product").Rows(0).Item("ProductTypeName")
					TextBox3.Text = dsP.Tables("Product").Rows(0).Item("ProductName")
					TextBox5.Text = dsP.Tables("Product").Rows(0).Item("Price")

					Me.DataGrid1.DataSource = dsS.Tables(0)
				Else
					MessageBox.Show("لايوجد سلعة بهذا الرقم", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading)
					TextBox1.Focus()
				End If
			Catch
				'Display error message, if any
			   messagebox.show(ex.message)

			End Try

		Else
			MessageBox.Show("من فضلك ادخل رقم السلعة", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading)
		End If
		TextBox1.Text = ""
		TextBox1.Focus()

جرب هذا الكود

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#3

شكرا لك اخي على المحاولة , قرأت ردك ولكن ليس ما اريد ...

كل ما اريده هو استعلام SQL .. لاني اريد الاستعلام لاحد التقارير ... والتقارير لا تقبل الا الاستعلاماات...

كما هو موضح بالاعلى .. انا عملت الاستعلام ولكن هناك مشكلة بعدم ظهور جميع البنود , فقط التي لها عملية شراء او بيع ..

اوضح اكثر ..

في طريقتي السابقة .. نحتاج لاستعلامين q1 وq2

q1 به مجموع عمليات الشراء للبنود .. ولا تظهر به البنود التي ليس لها عملية شراء (راجع الجدول table2)

وكذلك

q2 به مجموع عمليات البيع للبنود .. ولا تظهر به البنود التي ليس لها عملية بيع (راجع الجدول table2)

اما الاستعلام الاخير يعمل علاقة بين q1 وq2 ويعمل عملية طرح بين مجموع الشراء ومجموع البيع لينتج لنا الكمية للبند ... ومن البديهي عدم ظهور اي بند لم يوجد في q1 (أو) q2 بسبب العلاقة ...

فهل توجد اي طريقة (كعمل علاقة اخرى او شروط او استعلامات اضافية ...الخ ) لاظهار جميع البنود ...

لان التي ليس لها اي عملية شراء لاتظهر في q1 .... والتي ليس لها اي عملية بيع لا تظهر في q2

اتمنى ان الفكرة والمشكلة وضحت

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

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

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

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

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

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