تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف أضع شرط للحضورلا والأنصراف
#1
السـلام عليكم روحمة الله وبركاته 
عندي جدول مكون من 5 حقول (أي دي ترقيم تلقائي - الأسم - وقت الحضور - أسم اليوم - التاريخ - وقت الخروج )

في البدايه وضعت للحفظ شرط أذا كان أسم المستخدم + تاريخ اليوم غير مسجله سجل حضور لهذا الشخص قم بتسجيله حضور 
غير كذا 
أعمل تعديل على صاحب الكود الموجود الذي يحمل نفس التاريخ لليوم  وأحفظ وقت الأنصراف  
إلى هنـا تمام 
المشـاكل اللي طلعت لي :.
إذا سجل حضور وأنصراف وأدخل الكود مره ثانيه يجلس يعدل في بيانات الأنصراف وهاذي مشكله 

بالنسبه للأمر الثاني اللي أنا محتاجه أن أي شخص حاب يسجل دخول وخروج أكثر من مره في نفس اليوم ما يمنعه البرنامج
بحيث إذا سجل دخول لابد تسجيل خروج وبعدها يسمح له بستجيل الدخول مره أخرى 

أتمنى مســاعدتي في هذه الدوامه اللي عجزت أعملها
الرد }}}}
تم الشكر بواسطة: ابو ليلى
#2
الاخ عادل حسب فهمي لشرحك
المشكلة الاولى الخاصة بتعديل وقت الخروج مرة اخرى اعتمد على حقل وقت الخروج فاذا كان به بيانات فهذا يعني ان الموظف قد سجل الخروج فعلا و هذا يعني عدم السماح بالتعديل على السجل (يعني تقفل التعديل)

المشكلة الثانية تحتاج الى شرح لناخذ هذا المثال:
جاء عادل الى الدوام و نريد ان نسجل له حضور 
نستعلم عن طريق الاسم+تاريخ اليوم  في جدول الدوام فاذا لم يجده ذهب الى جدول الموظفين و جلب بيانات عادل وفق اسمه او الكود الخاص به
البيانات (اسم الموظف) و انت قمت بادراج تاريخ اليوم و ساعة الحضور 
بعد ذلك ترسل هذا الصف من البيانات المؤلف من اربع حقول (اسم الموظف - وقت الحضور - اسم اليوم - التاريخ) الى جدول الدوام
بهذا الشكل يكون عادل قد سجل حضور
عند الانصراف نحن نستعلم عن عادل في جدول الدوام وفق اسمه و تاريخ اليوم فاذا وجده احضره لنا و سمح لنا بالتعديل فقط في حقل الانصراف
و هنا هي النقطة المهمة انتبه لهذا الحقل (وقت الخروج) اذا كان به بيانات مسبقة لا تسمح بالتعديل عليه
نفس الفكرة لحقل وقت الخروج اذا كان به بيانات اسمح باضافة عادل مرة اخرى الى الى جدول الدوام ,شرح هذه النقطة ان حقل وقت الخروج يعني ان الموظف ليس في المؤسسة او الدائرة حاليا و بالتالي سيحتاج الى تسجيل حضور جديد عند عودته
و هنا تظهر لديك مشكلة اخرى اذا قام عادل بتسجيل الدخول اكثر من مرة في اليوم , و بالتالي عند جلب بيانات عادل وفق الاسم و تاريخ اليوم سيتكرر اسم عادل اكثر من مرة و حل هذه النقطة باستخدام المعامل Top في جملة Select 
اتمنى ان اكون وفقت في الشرح
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
تم الشكر بواسطة: جوري , جوري , ممدوح , ممدوح , Adrees
#3
السلام عليكم ورحمة الله وبركاته
جزاك الله كل الخير اخي الكريم ابو ليلي علي الشرح الوافي واتمني ان تشرح لنا كيفيه استخدام هذا المعامل (top)

اخي  الكريم عادل  : (في ردك تقول يمنعه البرنامج من تسجيل الحضور مره اخري ) وهذا ما دفعني  للمشاركه في الموضوع

لذا اتمني ان تكون مشاركتي مقبوله

_ اريد ا اسألك سؤال من خلال ما ذكرته فإن برنامجك يقوم بما تطلبه ينقصه فقط
امكانية تسجيل الدخول مره اخري وهذا امر يسير ان كت انت من قام بعمل البرنامج فما عليك سوي عمل دالة تعديل
خاصه بجدول الحضور وتستدعيها في زر تسجيل الحضور بعد وضع شرط التحقق من الحاله ان كان تسجيل حضور او انصراف وهذه نقطه
واعتقد ان البرنامج سوف يسير بشكل جيد ولكن ما الغايه منه في هذه الحاله ؟!

النقطه الاهم  هوا السؤال - هل انت مهتم في برنامجك بتسجيل الاحداث ؟!
التوضيح :
يعني - قام شخص بتسجيل الحضور - ثم بعد فتره قام بتسجيل الانصراف - ثو عاد وسجل حضور - ثم انصراف -
كل ذلك في نفس اليوم

هنا يتوجب عليك عمل جدول اخر لتسجيل هذه الاحداث  حتي تتمكن من معرفه تفاصيل تسجيل الحضور والانصراف
في هذه الحاله اعتقد ا البرنامج سيحقق الغايه منه

في ردي :
هل انا معك علي نفس الدرب ام انحرفت الي نقطة اخري؟!
اتمني ان تكون مشاركتي إثراء للموضوع وليست إعسار له
الرد }}}}
تم الشكر بواسطة: ممدوح , ممدوح , ابو ليلى , ابو ليلى
#4
(23-10-16, 06:14 PM)adel27 كتب : المشـاكل اللي طلعت لي :.
إذا سجل حضور وأنصراف وأدخل الكود مره ثانيه يجلس يعدل في بيانات الأنصراف وهاذي مشكله 
أضف في الجدول حقل من نوع bit الذي يقبل قيمة True او False 
الآن كل ماعليك هو عند تسجيل الحضور تجعل قيمة الحقل True
وعند الانصراف تتأكد اذا كانت قيمة الحقل True يتم الانصراف ويتم تعديل قيمة الحقل الى False 
فإذا كانت قيمة الحقل True يتم الانصراف واذا كانت False يتم تسجيل الحضور.
الرد }}}}
تم الشكر بواسطة: ابو ليلى , ممدوح
#5
على عجالة المعامل 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
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
تم الشكر بواسطة: جوري , Adrees , adel27 , adel27 , ممدوح
#6
(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

ماشاء الله 
شكرا جزيلا اخي ابو ليلي 
شرح يسير واضاف لي الكثير   

-اتمني ان تكون هذه الطريقه هي ضالتك اخي عادل
اتمني ان تكون مشاركتي إثراء للموضوع وليست إعسار له
الرد }}}}
تم الشكر بواسطة: ابو ليلى , ممدوح , ممدوح
#7
شـاكر ومقدر أبو ليلى ياليت توضح لي على المثال مع العلم أني طبقت المثال ولكن يرجع بنفس المشكله 
يمكن لأني لي أربع أيام أحاول فيه 
تفضل هذا المثال + القاعدة أنا أستخدم السب برستجر
الرد }}}}
تم الشكر بواسطة: ابو ليلى
#8
اخي عادل  انا لا استطيع ارفاق مثال بسبب اختلاف الاصدارات بيني و بينك
لذلك ارفع لك تعديل المثال وهو كود النموذج الخاص بك مع تعديل 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 StringByVal 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.NVarChar50With {.Value TimeOut1}
 
       Parma(1) = New SqlParameter("@ID"SqlDbType.IntWith {.Value Id}

 
       cmd.Parameters.AddRange(Parma)
 
       CON.Open()
 
       cmd.ExecuteNonQuery()
 
       CON.Close()
 
       MessageBox.Show("تم تعديل البيانات بنجاح""تعديل "MessageBoxButtons.OKMessageBoxIcon.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(sql1CON)
 
       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.Texttxtdate.Texttxtday.Texttxttime.TextTXTCODE.Text)
 
           MsgBox("تم تسجيل الدخول بنجاح")
 
       Else
            If DT1
(0)(1).ToString "" Then
                UpdateTime_Job
(txttime.TextDT1(0)(0))
 
               MsgBox("تم تسجيل الخروج")
 
           Else
                txtName
.Text GetFiled("Name""User_Emp""Code"TXTCODE.Text)
 
               InsertTime_Job(txtName.Texttxtdate.Texttxtday.Texttxttime.TextTXTCODE.Text)
 
               MsgBox("تم تسجيل الدخول بنجاح")
 
           End If
 
       End If

 
   End Sub
    Private Sub Button1_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click

        SHDATA
(TXTCODE.Text)
 
   End Sub

    Private Sub Form1_Load
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles 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.ObjectByVal e As System.EventArgsHandles 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 

انسخ الاكواد وضعها في مشروعك و اخبرني بالنتيجة
موفق ان شاء الله
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
تم الشكر بواسطة: ممدوح , adel27
#9
شـاكر ومقدر لكل من شاركني
أنتهت المشكله
الرد }}}}
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم