منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[ تمّ الحل ] : عدد الغياب الإجمالي للمترشّحين الذكور - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [ تمّ الحل ] : عدد الغياب الإجمالي للمترشّحين الذكور (/showthread.php?tid=35443)

الصفحات: 1 2


[ تمّ الحل ] : عدد الغياب الإجمالي للمترشّحين الذكور - عبد العزيز البسكري - 01-07-20

السّلام عليكم و رحمة الله و بركاته
إخواني الأكارم ..
الرّجاء المساعدة بحل هذا اللغز لأنّي بصراحة دخت .. و فوق كل ذي علم عليم
مجموعة من المواد الدراسية
أريد أن أعمل إحصاء
مجموع الغيابات بكل المواد لكل المترشّحين الذكور
مجموع الغيابات بكل المواد  لكل المترشّحين الإناث
عدد الإناث يظهر صحيح و هو 3
ما لم أجد له حلا هو عدد الذكور .. من المفروض يكون 9 و ليس 8
قمت بتلوين خلايا الغياب للمترشحين الذكور بالأزرق فقط للتأكد من أنّ العدد 9 و ليس 8
لماذا لا يتم الحساب بالشكل السليم

بارك الله فيكم و لكم مقدمًا



RE: عدد الغياب الإجمالي للمترشّحين الذكور - atefkhalf2004 - 01-07-20

حضرتك لا بد ان يكون اقواس بين كل شرطين معا


RE: عدد الغياب الإجمالي للمترشّحين الذكور - عبد العزيز البسكري - 01-07-20

(01-07-20, 11:23 PM)atefkhalf2004 كتب : حضرتك لا بد ان يكون اقواس بين كل شرطين معا

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

تحياتي واحتراماتي



RE: عدد الغياب الإجمالي للمترشّحين الذكور - WaeLx - 02-07-20

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

الشرط في جملة select  هو الصفوف التي تحتوي على كلمة "غائب" 

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

اذا هو لا يقوم بعد الخلايا التي تحتوي على كلمة "غائب"

و انما يقوم بعد الصفوف التي تحتوي على كلمة "غائب"

فلو تكررت الكلمة مرتين في نفس الصف تكون النتيجة 1 و ليس 2

دقق في الصفوف تجد رقم 41 ذكر و غائب مرتين لذا قام البرنامج باحتسابه 1


RE: عدد الغياب الإجمالي للمترشّحين الذكور - عبد العزيز البسكري - 02-07-20

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



RE: عدد الغياب الإجمالي للمترشّحين الذكور - kiki - 02-07-20

بطريقة الكود الخاصة بك يكون 8 وليس 9
والسبب هو تغيب الاى دى 41 مرتين الاولى فى اللغة العربية والثانية فى التربية
وبالكود الخاص بك انت تطلب عدد الاشخاصالتى تغيبت والافراد هنا 8
بينما عدد الغيابات بشكل عام للمواد هى 9


RE: عدد الغياب الإجمالي للمترشّحين الذكور - عبد العزيز البسكري - 02-07-20

(02-07-20, 03:05 AM)kiki كتب : بطريقة الكود الخاصة بك يكون 8 وليس 9
والسبب هو تغيب الاى دى 41 مرتين الاولى فى اللغة العربية والثانية فى التربية
وبالكود الخاص بك انت تطلب عدد الاشخاصالتى تغيبت والافراد هنا 8
بينما عدد الغيابات بشكل عام للمواد هى 9

كل الشكر و التقدير أخي الكريم
نعم فعلا هذا بيت القصيد بعد الإنتباه
و كيف يتم بلورة هذا الكود للتخلص من هذه الإشكالية .. لأنّ الأمر تعتمد عليه إحصاءات غير قابلة للتلاعب .. بارك الله فيك و لك
كود :
           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Absence_Arabe='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Physique='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Islamique='غائب'  And STUDENT_Gender='ذكر' Or STUDENT_Absence_Civile='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Mathematique='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Anglais='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Historique='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Francais='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Science='غائب' And STUDENT_Gender='ذكر' Or STUDENT_Absence_Amazighe='غائب' And STUDENT_Gender='ذكر'"

تحياتي واحتراماتي



RE: عدد الغياب الإجمالي للمترشّحين الذكور - WaeLx - 02-07-20

(02-07-20, 02:41 AM)عبد العزيز البسكري كتب :
السّلام عليكم و رحمة الله و بركاته
نعم معك الحق أخي الكريم بكل كلامك بارك الله فيك و لك و جزاك خير الجزاء
هل تقصد يجب إستعمال  SUM بدلا من COUNT
تحياتي واحتراماتي


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

بالتاكيد هناك افكار اكثر احترافية مما سأكتب

لكن هذا ما خطر ببالي

كود :
Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Arabe='غائب'"
           Me.TextBox2.Text = Cmd.ExecuteScalar().ToString()
           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Physique='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())
       
   و هكذ الى اخر الاعمدة



RE: عدد الغياب الإجمالي للمترشّحين الذكور - عبد العزيز البسكري - 02-07-20

بارك الله فيك و لك و جزاك خير الجزاء أخي الكريم وائل
فعلا الطريقة تعطي نتيجة صحيحة و سليمة
و سأعتمدها بإذن الله .. اللهم إذا طرح أحد الإخوة الأعزاء فكرة نوعا ما مختصرة
كود :
Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Arabe='غائب'"
           Me.TextBox2.Text = Cmd.ExecuteScalar().ToString()

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Physique='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Islamique='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Civile='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Mathematique='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Anglais='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Historique='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Francais='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Science='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

           Cmd.CommandText = "SELECT COUNT(*) From TBL_STUDENT Where STUDENT_Gender='ذكر' And STUDENT_Absence_Amazighe='غائب'"
           Me.TextBox2.Text = Val(TextBox2.Text) + Val(Cmd.ExecuteScalar().ToString())

تحياتي واحتراماتي و تقييماتي



RE: عدد الغياب الإجمالي للمترشّحين الذكور - kiki - 02-07-20

مرحباً اخى عبد العزيز البسكري
نظرياً لاتمام الامر يجب عليك كا فكرياً تحويل العمود الى صف والصف الى عمود
يعنى بعد ما كان رئس كل عمود بالجدول هو اسماء المواد فاصبح الامر عكسي ولاتمام ذلك
فعلك انشاء جدول وهمى خاصة بالداتا التى تتواجد فى الجدول الرئيسي لديك
يعنى مثلاً انا بقول كالتالى
كود :
select ahmed from tb
فهنا الـ tb الرئيسي لديك تريدك عكس الامور التى به لتعطي نتائج محددة
فهنا مش هينفع اقول from tb انما هقول كالتالى
كود :
From (Select......)
والوظيفة هنا هو الجدول للشكل الذى اريده لجلب البيانات التى بها بالطريقة المطلوبة
طيب لاتمام الامر وعدد الاسطر كثيرة فهنا سيتطلب انشاء لكل عمود جدول وهمي ليصبح الناتج
كود :
From (Select....), (Select....) .....
وبما انك لديك 10 اعمدة مطلوب التلاعب بها وهى خاصة المواد الدراسية فهنا سيتطلب عمل Select التى بعد From بعدد 10 مرات عن كل مدة
طبعاً بهذا الشكل اصبح كود الاستعلام كبير جداً ولاتمام الامر للذكر مرة ومن ثمة تكرار الامر للانثي مرة اصبح اكبر

ولكى اقوم بتوفير التكرار وحجم الكود فى الكتابة احببت ان اقوم بهذا التعديل على المشروع الخاص بك
كل ما علك التالى تاتى عند Sub الخاص بالتالى Recuperer_Record_Bachalaureat_Masculin_Feminin_Absence
وتقوم بحذف كل ما بداخله وتستبدله بالكود التالى
كود :
       If Conne_2020.State = ConnectionState.Closed Then Conne_2020.Open()
       Dim _Gender As String() = New String() {"ذكر", "أنثى"}
       Dim _Absent As String = "غائب"
       Using Cmd As OleDbCommand = New OleDbCommand(Nothing, Conne_2020)
           For i As Integer = 0 To 1
               Cmd.CommandText = "SELECT Sum(T1.Arabe + T2.Physique + T3.Islamique + T4.Civile + T5.Mathematique + T6.Anglais + T7.Historique + T8.Francais + T9.Science + T10.Amazighe) As Male
                               FROM

                               (SELECT
                               Count(*) AS Arabe
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Arabe = '" & _Absent & "') as T1,

                               (SELECT
                               Count(*) AS Physique
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Physique = '" & _Absent & "') as T2,

                               (SELECT
                               Count(*) AS Islamique
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Islamique = '" & _Absent & "') as T3,

                               (SELECT
                               Count(*) AS Civile
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Civile = '" & _Absent & "') as T4,

                               (SELECT
                               Count(*) AS Mathematique
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Mathematique = '" & _Absent & "') as T5,

                               (SELECT
                               Count(*) AS Anglais
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Anglais = '" & _Absent & "') as T6,

                               (SELECT
                               Count(*) AS Historique
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Historique = '" & _Absent & "') as T7,

                               (SELECT
                               Count(*) AS Francais
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Francais = '" & _Absent & "') as T8,

                               (SELECT
                               Count(*) AS Science
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Science = '" & _Absent & "') as T9,

                               (SELECT
                               Count(*) AS Amazighe
                               FROM
                               TBL_STUDENT
                               WHERE
                               STUDENT_Gender = '" & _Gender(i) & "' AND
                               STUDENT_Absence_Amazighe = '" & _Absent & "') as T10
                             "
               If (i) Then
                   TextBox3.Text = Cmd.ExecuteScalar().ToString()
               Else
                   TextBox2.Text = Cmd.ExecuteScalar().ToString()
               End If
           Next

       End Using
       If Conne_2020.State = ConnectionState.Open Then Conne_2020.Close()


قمت بعمل مسافة بين كل جزء فى كود الاستعلام حتى توضح لك الفكرة
وقمت ببعض اللمسات لعدم التكرار وتقليل من حجم الكتابة فى الكود وبالنهاية سيكون الناتج كالتالى 9 + 3
وبكده تكون اتمت المطلوب الذى تريده تماماً

طيب شى اضافى كده عنا ما كنت تقوم به مسبقاً تتذكر هذا الكود الخاص بك
كود :
SELECT COUNT(*)
From TBL_STUDENT
Where
STUDENT_Absence_Arabe='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Physique='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Islamique='غائب'  And STUDENT_Gender='ذكر'
Or STUDENT_Absence_Civile='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Mathematique='غائب' And STUDENT_Gender='ذكر'
Or STUDENT_Absence_Anglais='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Historique='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Francais='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Science='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Amazighe='غائب' And STUDENT_Gender='ذكر'
فى المرة القادمة عندما تريد استخدامه 
لتحديد عدد الافراد المتغيبين اجعلها بهذا الشكل
كود :
SELECT COUNT(*)
From (SELECT * From TBL_STUDENT Where STUDENT_Gender='ذكر')
Where
STUDENT_Absence_Arabe='غائب' Or
STUDENT_Absence_Physique='غائب' Or
STUDENT_Absence_Islamique='غائب' Or
STUDENT_Absence_Civile='غائب' Or
STUDENT_Absence_Mathematique='غائب' Or
STUDENT_Absence_Anglais='غائب' Or
STUDENT_Absence_Historique='غائب' Or
STUDENT_Absence_Francais='غائب' Or
STUDENT_Absence_Science='غائب'Or
STUDENT_Absence_Amazighe='غائب'

حتى تتمكن عمل الفكرة لما شرحته بالاعلى ولما ستجده بالكود بالاعلى مثل كود For
لتحويل كلمة واحدة فقط وهى من ذكر الى انثي والعكس دون تكرارها 10 مرات
اتمنى ان يفيدك الكود وان يكون الشرح مبسط

تم ارفاق المشروع بعد عمد بعد تعديلات ولمسات على شكل وترتيب الفورم وبعض الاكواد