اسعد الله اوقاتكم ايها الاخوة
يوجد عندي كود لمعرفة عدد غياب الموظفين بين تاريخين ولكن يوجد فية خطأ يرجى منكم التصحيح
استعمل فيجوال 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 وكذالك العلاقة بينهم موجودة
مع كل الاحترام