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

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

يوجد عندي كود لمعرفة عدد غياب الموظفين بين تاريخين ولكن يوجد فية خطأ يرجى منكم التصحيح

استعمل فيجوال 2008 مع قاعدة بيانان اكسس 2003

مرفق الكود مع مثال للتجربة


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim cmd As New OleDbCommand
        cmd.Connection = Conn
        cmd.CommandType = CommandType.Text
        cmd.CommandText = "select sum(Holiday)as Total from HolidayBooks where DateDay between #" & TextBox1.Text & "#" & "and" & "#" & TextBox2.Text & "' and HolidayBooks.CoName LiKE '%" & Trim(TextBox4.Text) & "' group by HolidayBooks.CoName "
        Conn.Open()
        Dim Total As Integer = cmd.ExecuteScalar
        Conn.Close()
        TextBox6.Text = Total.ToString
        Conn.Close()



    End Sub
السلام عليكم

هل يختلف هذا الموضوع عن موضوعك السابق:
مطلوب كود جمع عدد غياب الموظفين بين تاريخين

جرب هذا التعديل
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   Dim sqlStr As String = _
       " SELECT  Sum([Holiday]) AS [Total] " & _
       " FROM    [HolidayBooks] " & _
       " WHERE   ( YEAR([DateDay]) = YEAR(NOW) ) " & _
       "         AND ( [CoName] LIKE '%" & Trim(TextBox4.Text) & "') " & _
       " GROUP   BY [CoName] "

   Dim cmd As New OleDbCommand(sqlStr, Conn)

   Conn.Open()
   Dim Total As Integer = cmd.ExecuteScalar
   Conn.Close()

   TextBox6.Text = Total.ToString

End Sub
اشكرك اخي العزيز مساعدة اولا
نعم نفس الموضوع السابق حيث تم الحل بطريقة برمجية تختلف كثيرا عما نستخدم
وعند تجربة الحل الجديد في هذة المشاركة فان جميع النتائج تظهر خطأ حيت نريد ان نبحث بين تاريخين مثلا
من تاريخ 2017/10/05 الى تاريخ 2017/12/31 لا تعطينا العدد الصحيح لغياب الموظف

اخي العزيز
دائما عند البحث بيت تاريخين نستعمل between اين دورها في هذا المثال

شكرا على طولة الصبر
ما المشكلة في طريقة البرمجة السابقة !



عندما رأيت التاريخ بداية السنة في مربع النص TextBox1 ونهاية السنة في مربع النص TextBox2 ظننت أن المطلوب هو البحث في السنة كاملة

حسناً، طالما المسألة فيها تغيير للتاريخ، تفضل هذا الكود
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   Dim sqlStr As String = _
       " SELECT  Sum([Holiday]) AS [Total] " & _
       " FROM    [HolidayBooks] " & _
       " WHERE   ( [DateDay] BETWEEN @d1 AND @d2 ) " & _
       "         AND ( [CoName] LIKE @nm ) " & _
       " GROUP   BY [CoName] "

   Dim cmd As New OleDbCommand(sqlStr, Conn)
   cmd.Parameters.AddWithValue("@d1", CDate(TextBox1.Text))
   cmd.Parameters.AddWithValue("@d2", CDate(TextBox2.Text))
   cmd.Parameters.AddWithValue("@nm", "%" & Trim(TextBox4.Text))

   Conn.Open()
   Dim Total As Integer = cmd.ExecuteScalar
   Conn.Close()

   TextBox6.Text = Total.ToString

End Sub
اخي العزيز مساعدة اشكرك من كل قلبي على هذا الجهد

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


عادة جدول الموظفين Employees يكون فيه فقط بياناتهم الثابتة والتي نادراً ما يتم التعديل عليها.
أما مهامهم وإنجازاتهم تتم في جداول أخرى يتم فيه بالاشارة لرقم الموظف بأحد أعمدتها مثل EmployeeID.
اخي العزيز مساعدة كل الاحترام والتقديم
اخي العزيز لو انتبهت الى المثال المرفق من قبل لتجد هناك جدول للموظفيين ومعلوماتهم اسم الجدول SalaryMan
وهناك جدول اخر للحركات واسم الجدول HolidayBooks وكذالك العلاقة بينهم موجودة

مع كل الاحترام