المشاركات : 587
المواضيع 129
الإنتساب : Sep 2015
السمعة :
8
الشكر: 1032
تم شكره 2475 مرات في 129 مشاركات
23-10-16, 06:14 PM
(آخر تعديل لهذه المشاركة : 23-10-16, 09:50 PM {2} بواسطة adel27.)
السـلام عليكم روحمة الله وبركاته
عندي جدول مكون من 5 حقول (أي دي ترقيم تلقائي - الأسم - وقت الحضور - أسم اليوم - التاريخ - وقت الخروج )
في البدايه وضعت للحفظ شرط أذا كان أسم المستخدم + تاريخ اليوم غير مسجله سجل حضور لهذا الشخص قم بتسجيله حضور
غير كذا
أعمل تعديل على صاحب الكود الموجود الذي يحمل نفس التاريخ لليوم وأحفظ وقت الأنصراف
إلى هنـا تمام
المشـاكل اللي طلعت لي :.
إذا سجل حضور وأنصراف وأدخل الكود مره ثانيه يجلس يعدل في بيانات الأنصراف وهاذي مشكله
بالنسبه للأمر الثاني اللي أنا محتاجه أن أي شخص حاب يسجل دخول وخروج أكثر من مره في نفس اليوم ما يمنعه البرنامج
بحيث إذا سجل دخول لابد تسجيل خروج وبعدها يسمح له بستجيل الدخول مره أخرى
أتمنى مســاعدتي في هذه الدوامه اللي عجزت أعملها
المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
الاخ عادل حسب فهمي لشرحك
المشكلة الاولى الخاصة بتعديل وقت الخروج مرة اخرى اعتمد على حقل وقت الخروج فاذا كان به بيانات فهذا يعني ان الموظف قد سجل الخروج فعلا و هذا يعني عدم السماح بالتعديل على السجل (يعني تقفل التعديل)
المشكلة الثانية تحتاج الى شرح لناخذ هذا المثال:
جاء عادل الى الدوام و نريد ان نسجل له حضور
نستعلم عن طريق الاسم+تاريخ اليوم في جدول الدوام فاذا لم يجده ذهب الى جدول الموظفين و جلب بيانات عادل وفق اسمه او الكود الخاص به
البيانات (اسم الموظف) و انت قمت بادراج تاريخ اليوم و ساعة الحضور
بعد ذلك ترسل هذا الصف من البيانات المؤلف من اربع حقول (اسم الموظف - وقت الحضور - اسم اليوم - التاريخ) الى جدول الدوام
بهذا الشكل يكون عادل قد سجل حضور
عند الانصراف نحن نستعلم عن عادل في جدول الدوام وفق اسمه و تاريخ اليوم فاذا وجده احضره لنا و سمح لنا بالتعديل فقط في حقل الانصراف
و هنا هي النقطة المهمة انتبه لهذا الحقل (وقت الخروج) اذا كان به بيانات مسبقة لا تسمح بالتعديل عليه
نفس الفكرة لحقل وقت الخروج اذا كان به بيانات اسمح باضافة عادل مرة اخرى الى الى جدول الدوام ,شرح هذه النقطة ان حقل وقت الخروج يعني ان الموظف ليس في المؤسسة او الدائرة حاليا و بالتالي سيحتاج الى تسجيل حضور جديد عند عودته
و هنا تظهر لديك مشكلة اخرى اذا قام عادل بتسجيل الدخول اكثر من مرة في اليوم , و بالتالي عند جلب بيانات عادل وفق الاسم و تاريخ اليوم سيتكرر اسم عادل اكثر من مرة و حل هذه النقطة باستخدام المعامل Top في جملة Select
اتمنى ان اكون وفقت في الشرح
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 16
المواضيع 1
الإنتساب : Oct 2016
السمعة :
2
الشكر: 26
تم شكره 17 مرات في 11 مشاركات
السلام عليكم ورحمة الله وبركاته
جزاك الله كل الخير اخي الكريم ابو ليلي علي الشرح الوافي واتمني ان تشرح لنا كيفيه استخدام هذا المعامل (top)
اخي الكريم عادل : (في ردك تقول يمنعه البرنامج من تسجيل الحضور مره اخري ) وهذا ما دفعني للمشاركه في الموضوع
لذا اتمني ان تكون مشاركتي مقبوله
_ اريد ا اسألك سؤال من خلال ما ذكرته فإن برنامجك يقوم بما تطلبه ينقصه فقط
امكانية تسجيل الدخول مره اخري وهذا امر يسير ان كت انت من قام بعمل البرنامج فما عليك سوي عمل دالة تعديل
خاصه بجدول الحضور وتستدعيها في زر تسجيل الحضور بعد وضع شرط التحقق من الحاله ان كان تسجيل حضور او انصراف وهذه نقطه
واعتقد ان البرنامج سوف يسير بشكل جيد ولكن ما الغايه منه في هذه الحاله ؟!
النقطه الاهم هوا السؤال - هل انت مهتم في برنامجك بتسجيل الاحداث ؟!
التوضيح :
يعني - قام شخص بتسجيل الحضور - ثم بعد فتره قام بتسجيل الانصراف - ثو عاد وسجل حضور - ثم انصراف -
كل ذلك في نفس اليوم
هنا يتوجب عليك عمل جدول اخر لتسجيل هذه الاحداث حتي تتمكن من معرفه تفاصيل تسجيل الحضور والانصراف
في هذه الحاله اعتقد ا البرنامج سيحقق الغايه منه
في ردي :
هل انا معك علي نفس الدرب ام انحرفت الي نقطة اخري؟!
اتمني ان تكون مشاركتي إثراء للموضوع وليست إعسار له
المشاركات : 346
المواضيع 2
الإنتساب : Feb 2014
السمعة :
32
الشكر: 704
تم شكره 1053 مرات في 203 مشاركات
24-10-16, 01:58 PM
(آخر تعديل لهذه المشاركة : 24-10-16, 02:02 PM {2} بواسطة Adrees.)
(23-10-16, 06:14 PM)adel27 كتب : المشـاكل اللي طلعت لي :.
إذا سجل حضور وأنصراف وأدخل الكود مره ثانيه يجلس يعدل في بيانات الأنصراف وهاذي مشكله
أضف في الجدول حقل من نوع bit الذي يقبل قيمة True او False
الآن كل ماعليك هو عند تسجيل الحضور تجعل قيمة الحقل True
وعند الانصراف تتأكد اذا كانت قيمة الحقل True يتم الانصراف ويتم تعديل قيمة الحقل الى False
فإذا كانت قيمة الحقل True يتم الانصراف واذا كانت False يتم تسجيل الحضور.
المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
على عجالة المعامل Top ياتي بمجموع من السجلات في الجدول وفق الرقم الذي ياتي بعد الكلمة Top
مثال
PHP كود :
SELECT TOP 3 Name,Phone FROM Persons Where Name='Amjad' order by id Desc
هنا سيجلب لنا اخر 3 سجلات في الجدول للشخص المسمى امجد مرتبة تنازليا وفق المعرف
استخدام Desc يفيدنا بجلب الادخالات الحديثة ثم الاقدم , و لجلب الادخالات القديمة ثم الاحدث ازل Desc
و لنجلب اخر ادخال فقط نغير Top 3 الى Top 1
يقابله في Ling المعامل Take
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 16
المواضيع 1
الإنتساب : Oct 2016
السمعة :
2
الشكر: 26
تم شكره 17 مرات في 11 مشاركات
(24-10-16, 04:06 PM)ابو ليلى كتب : على عجالة المعامل Top ياتي بمجموع من السجلات في الجدول وفق الرقم الذي ياتي بعد الكلمة Top
مثال
PHP كود :
SELECT TOP 3 Name Phone FROM Persons Where Name='Amjad' order by id Desc
هنا سيجلب لنا اخر 3 سجلات في الجدول للشخص المسمى امجد مرتبة تنازليا وفق المعرف
استخدام Desc يفيدنا بجلب الادخالات الحديثة ثم الاقدم , و لجلب الادخالات القديمة ثم الاحدث ازل Desc
و لنجلب اخر ادخال فقط نغير Top 3 الى Top 1
يقابله في Ling المعامل Take
ماشاء الله
شكرا جزيلا اخي ابو ليلي
شرح يسير واضاف لي الكثير
-اتمني ان تكون هذه الطريقه هي ضالتك اخي عادل
اتمني ان تكون مشاركتي إثراء للموضوع وليست إعسار له
المشاركات : 587
المواضيع 129
الإنتساب : Sep 2015
السمعة :
8
الشكر: 1032
تم شكره 2475 مرات في 129 مشاركات
24-10-16, 08:49 PM
(آخر تعديل لهذه المشاركة : 24-10-16, 11:32 PM {2} بواسطة adel27.)
شـاكر ومقدر أبو ليلى ياليت توضح لي على المثال مع العلم أني طبقت المثال ولكن يرجع بنفس المشكله
يمكن لأني لي أربع أيام أحاول فيه
تفضل هذا المثال + القاعدة أنا أستخدم السب برستجر
المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
اخي عادل انا لا استطيع ارفاق مثال بسبب اختلاف الاصدارات بيني و بينك
لذلك ارفع لك تعديل المثال وهو كود النموذج الخاص بك مع تعديل Stored Procedure الخاص بالتعديل (UpdateTime_Job) و ان شاء الله يعمل معك
اولا كود النموذج
PHP كود :
Imports System.Data.SqlClient Public Class Form1 Dim CON As New SqlConnection("Data Source=LAPNONO;Initial Catalog=jobss;Integrated Security=True") '----------Public Sub Insert ---------- Public Sub InsertTime_Job(ByVal Name As String, ByVal DateNow As String, ByVal NameDey As String, ByVal TimeOn As String, ByVal Code As String) Dim cmd As SqlCommand Cmd = New SqlCommand("InsertTime_Job", con) cmd.CommandType = CommandType.StoredProcedure Dim Parma(4) As SqlParameter Parma(0) = New SqlParameter("@Name", SqlDbType.NVarChar, 50) With {.Value = Name} Parma(1) = New SqlParameter("@DateNow", SqlDbType.NVarChar, 50) With {.Value = DateNow} Parma(2) = New SqlParameter("@NameDey", SqlDbType.NVarChar, 50) With {.Value = NameDey} Parma(3) = New SqlParameter("@TimeOn", SqlDbType.NVarChar, 50) With {.Value = TimeOn} Parma(4) = New SqlParameter("@Code", SqlDbType.NVarChar, 50) With {.Value = Code} Cmd.Parameters.AddRange(Parma) Con.Open() cmd.ExecuteNonQuery() Con.close() MessageBox.Show("تمت إضافة البيانات بنجاح", "إضافة جديد", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub
Public Function GetFiled(ByVal ReturnFiled As String, ByVal Tbl As String, ByVal CondFiled As String, ByVal Id As String) As String Dim serch As String = "" serch = "Select " & ReturnFiled & " From " & Tbl & " Where " & CondFiled & " Like '" & Id & "' "
Dim Cmd As New SqlCommand(serch, CON) Dim ReturnResult As String = "" CON.Open() Dim red As SqlDataReader = Cmd.ExecuteReader While red.Read If red.HasRows Then If Not (red(ReturnFiled) Is Nothing) Or red(ReturnFiled).ToString.Length > 0 Then ReturnResult = red(ReturnFiled).ToString Else ReturnResult = 0 End If End If End While red.Close() Cmd.Dispose() CON.Close() Return ReturnResult End Function
Sub SHDATA(ByVal X As String)
Dim sql = "select * from User_Emp where Code='" & (X) & "'" Dim cmd As New SqlCommand(sql, CON) CON.Open() Dim C As Integer = cmd.ExecuteScalar CON.Close() If C = 0 Then MessageBox.Show("لم يتم العثور على سجل ") Exit Sub Else INSERT(txttime.Text) End If End Sub
'----------Public Sub Update ---------- Public Sub UpdateTime_Job(ByVal TimeOut1 As String, ByVal Id As Integer) Dim cmd As SqlCommand cmd = New SqlCommand("UpdateTime_Job", CON) cmd.CommandType = CommandType.StoredProcedure Dim Parma(1) As SqlParameter Parma(0) = New SqlParameter("@TimeOut1", SqlDbType.NVarChar, 50) With {.Value = TimeOut1} Parma(1) = New SqlParameter("@ID", SqlDbType.Int) With {.Value = Id}
cmd.Parameters.AddRange(Parma) CON.Open() cmd.ExecuteNonQuery() CON.Close() MessageBox.Show("تم تعديل البيانات بنجاح", "تعديل ", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub
Sub INSERT(ByVal Y As String)
Dim sql1 = "select TOP 1 ID, TimeOut1 FROM Time_Job WHERE (DateNow ='" & txtdate.Text & "' And CODE='" & TXTCODE.Text & "') ORDER BY ID Desc"
Dim da As New SqlClient.SqlDataAdapter(sql1, CON) Dim ds As New DataSet da.Fill(ds) Dim DT1 = ds.Tables(0) If DT1.Rows.Count <= 0 Then txtName.Text = GetFiled("Name", "User_Emp", "Code", TXTCODE.Text) InsertTime_Job(txtName.Text, txtdate.Text, txtday.Text, txttime.Text, TXTCODE.Text) MsgBox("تم تسجيل الدخول بنجاح") Else If DT1(0)(1).ToString = "" Then UpdateTime_Job(txttime.Text, DT1(0)(0)) MsgBox("تم تسجيل الخروج") Else txtName.Text = GetFiled("Name", "User_Emp", "Code", TXTCODE.Text) InsertTime_Job(txtName.Text, txtdate.Text, txtday.Text, txttime.Text, TXTCODE.Text) MsgBox("تم تسجيل الدخول بنجاح") End If End If
End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SHDATA(TXTCODE.Text) End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load txtdate.Text = Format(Today, "yyyy/MM/dd") txtday.Text = Date.Today.ToString("dddd") End Sub
Private Sub TimerSS_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerSS.Tick txttime.Text = Date.Now.ToString("hh:mm:ss tt") End Sub End Class
ثانيا التعديل على الاجراء المخزن (UpdateTime_Job)
PHP كود :
ALTER procedure [dbo].[UpdateTime_Job]
@TimeOut1 nvarchar(50), @ID integer
As UPDATE Time_Job Set
TimeOut1=@TimeOut1
Where ID=@ID
انسخ الاكواد وضعها في مشروعك و اخبرني بالنتيجة
موفق ان شاء الله
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 587
المواضيع 129
الإنتساب : Sep 2015
السمعة :
8
الشكر: 1032
تم شكره 2475 مرات في 129 مشاركات
شـاكر ومقدر لكل من شاركني
أنتهت المشكله
|