منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

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

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


الاحصائيات والرسوم البيانية .


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


وهكذا ، وبما أن برنامجنا لا يعدو أن يكون برنامجاً لسوبر ماركت فقط ، فلن يتوقع المستخدم الكثير من المخططات أو الاحصائيات ، ولكن لتطبيق المفهوم سوف نتعلم سوية كيفية عمل مخطط بياني لنسب مبيعات ومشتريات البضاعة من ضمن المشتريات ، وسنضيفها ضمن شاشة تقارير البضائع Frm_Report1 .

وسنبدأ سوية في طريقة عامة لعمل المخططات البيانية .

قم بالنقر على
Ctrl+T لعرض الأدوات ، ومنها قم باختيار الأداة :

Microsoft Chart Control 6.0(OLEDB
)

والآن قم برسمها على الفورم كما يحلو لك ، وسنحتاج إلى ضبط بعض الخصائص .
خاصية Charttype : أحد أهم خصائص الأداة ، وذلك أنها تحدد شكل المخطط البياني ( ثلاثي أو ثنائي الأبعاد - دائري أو اعتيادي أو X,Y ... ) وهكذا .
وسنختار VtchChartType2dPie

وآخر ثلاثة أحرف من الأسم للنوع وقبلها حرفان لتحديد ( ثلاثي أم ثنائي الأبعاد ) .


خاصيتا Row و Column وكل ما يتعلق بهما .

تحدد خاصية Row عدد الصفوف ، أي عدد السجلات أو التقارير المطلوبة ، فمثلاً لو كنا نريد أن نعرض في نفس الوقت أكثر من بضاعة للمقارنة فإننا نضبط خاصية RowCount بعدد البضائع ، أم الآن فسنضبطها بحيث تساوي 1 .

أما Column فتحدد عدد النقاط أو البيانات ، وفي مثالنا هذا لدينا أربع بيانات ( اجمالي المبيعات - اجمالي المشتريات - اجمالي مبيعات البضاعة - اجمالي مشتريات البضاعة ) . لذا نضبط ColumnCount=4 .


وسنضبط باقي الخصائص وقت التصميم .


والآن نحتاج إلى أربع قيم نخزنها في مصفوفة Total(3) بالترتيب ، وسنضع هذه الأوامر في آخر زر التنفيذ .
فالأولى هو العدد الكلي للمبيعات ، لذا ننفذ جملة استعلام على المدة المحددة ونخزن البيانات في العنصر الأول للمصفوفة :
وسنستعلم عن مجموع العمود الذي يحقق الشرط ، وعدد السجلات فيه لمنع حدوث خطأ NULL .



كود :
If Option1.Value = True Then
SQL = "select sum(count) as sum1,count(product) as cnt from tb_sel_bay where kind=0"
Else
SQL = "select sum(count) as sum1,count(product) as cnt from tb_sel_bay where kind=0 " & " and date between#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "#"
End If
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4!cnt <> 0 Then
Total(0) = T4!sum1
End If
T4.Close
لاحظ أننا تأكدنا من عدد السجلات مسبقاً لتلافي خطأ Null ، جرب ازالته ولاحظ الفرق .


والثاني العدد الكلي للمشتريات ، وهو مثل السابق مع اختلاف Kind في جملة الاستعلام :


كود :
If Option1.Value = True Then
SQL = "select sum(count) as sum1,count(product) as cnt from tb_sel_bay where kind=1"
Else
SQL = "select sum(count) as sum1,count(product) as cnt from tb_sel_bay where kind=1 " & " and date between#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "#"
End If
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4!cnt <> 0 Then
Total(1) = T4!sum1
End If
T4.Close

أما البيان الثالث فهو مجموع مبيعات البضاعة ، ونستطيع الحصول عليها من الجدول دون أن نضطر إلى جملة استعلام أخرى :


كود :
MSFlexGrid(0).Col = 3
For i = 1 To MSFlexGrid(0).Rows - 1
MSFlexGrid(0).Row = i
Total(2) = Total(2) + MSFlexGrid(0).Text
Next i
ونفس الأمر بالنسبة لمشتريات البضاعة :


كود :
MSFlexGrid(1).Col = 3
For i = 1 To MSFlexGrid(1).Rows - 1
MSFlexGrid(1).Row = i
Total(3) = Total(3) + MSFlexGrid(1).Text
Next i
والآن جاء دور وضع البيانات ، وبما أننا نريد الاستفادة من خاصية Index سنضيف النصوص التوضيحية في مصفوفة هي الأخرى :


كود :
Dim str(3) As String
str(0) = "اجمالي مبيعات"
str(1) = "اجمالي مشتريات"
str(2) = "اجمالي مبيعات بضاعة"
str(3) = "اجمالي مشتريات بضاعة"

ونضبط خصائص المخطط كما أسلفنا :


كود :
MSChart2.ColumnCount = 4
MSChart2.RowCount = 1
ونبدأ في وضع البيانات بحلقة تكرار ، مع مراعاة أننا نضع البيان بواسطة الخاصية Date وننتقل للعمود من خلال الخاصية Column ونضع النص التوضيحي من خلال الخاصية ColumnLabel :


كود :
For i = 1 To 4
MSChart2.Column = i
MSChart2.Data = Total(i - 1)
MSChart2.ColumnLabel = str(i - 1)
Next i

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