2017-03-20 2 views
0

클라이언트가 이미 로그인되어 있는지 확인하려고합니다. 그렇다면 새 레코드를 추가하는 대신 버튼이 서명됩니다. 해결책을 찾기 위해 애를 먹고 있습니다. 이 내가 사용하고 현재 코드입니다 :이 유효성 검사가 없지만, 필자는 클라이언트가 로그인되어있는 경우 내가 단순히 스크립트를 검사 할 .. 행운과 많은 다른 코드를 시도vb로 액세스 할 수있는 레코드가 이미 존재하는 경우 레코드 업데이트

 Private Sub btnSignIn_Click(sender As Object, e As EventArgs) Handles btnSignIn.Click 
    Dim cmd As New OleDbCommand 
    '  cnn = cnn 
    Try 
     If Not cnn.State = ConnectionState.Open Then 'open the database connection 
      cnn.Open() 
     End If 

     If txtClientName.Text = Nothing Then   'check to see if the name field is empty 
      MsgBox("Please enter a name to sign in") 
      txtClientName.Focus() 

     ElseIf txtDateTime.Text = Nothing Then   ' checks if timeslip is empty 
      MsgBox("Please enter a valid time to sign in") 
      txtDateTime.Focus() 
     Else          'if no fields are empty proceed with code 
      cmd.Connection = cnn 
      cmd.CommandText = "INSERT INTO LogSheet (ClientName, SignInTime, CurrentDate)" & 
           "VALUES(?, ?, ?)" 
      cmd.Parameters.AddWithValue("@p1", txtClientName.Text.ToString.ToUpper) 
      cmd.Parameters.AddWithValue("@p2", txtDateTime.Text) 
      cmd.Parameters.AddWithValue("@p3", Date.Now().ToShortDateString) 

      cmd.ExecuteNonQuery() 
      RefreshData() 
      txtClientName.Clear() 
      txtDateTime.Clear() 

     End If 

    Catch ex As Exception 
     MessageBox.Show(ex.Message & " - " & ex.Source) 
     cnn.Close() 
    End Try 

End Sub 

, 그가 밖으로 서명이라면 다른 오류 "이미 로그인 클라이언트"를 제공, 바로 signout 필드를 감사

이 내 프로그램은 1

답변

0

다음 필드를 포함하도록 데이터베이스 테이블 (LogSheet)의 구조를 업데이트하십시오. ClientName, SignInTime, SignInRelation, SignOutTime, , 클라이언트가 오늘 (하는 currentDate)에 대한 다음 SignInTime에 서명 된 경우 CurrentDate

는 다음 SignOutTime에 대한 값을 채울 수 있습니다, 값이됩니다.

이 당신이 그것을 코딩 할 수있는 하나의 가능한 방법입니다

이 코드는 테스트되지 않은,하지만 당신은 아이디어를 얻을 것이다.

Sub BtnSignIn_Click() 
    If IsUserLoggedIn(txtClientName.Text) = True Then 
     'Client has been logged in already. Do Action. 
    Else 

     'Client has not been logged in today. Do Action. 
    End If 
End Sub 


Function IsUserLoggedIn(UserName As String) As Boolean 
    Dim sql = "Select SignOutTime From LogSheet Where [email protected] AND [email protected]" 

    Try 
     Using cnn As New OleDbConnection 
      Using cmd As New OleDbCommand(sql, cnn) 
       cnn.Open() 
       cmd.Parameters.AddWithValue("@D", Today.Date.ToShortDateString) 
       cmd.Parameters.AddWithValue("@C", UserName) 
       Dim result = cmd.ExecuteScalar 

       If result Is Nothing OrElse result Is DBNull.Value OrElse String.IsNullOrEmpty(result.ToString) Then 
        Return False 
       Else 
        Return True 
       End If 

      End Using 
     End Using 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Error: " & System.Reflection.MethodBase.GetCurrentMethod.Name, MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Function 
+0

예. 나는 그것에 대해 생각했습니다. 아마도 인생을 더 편하게 만듭니다.하지만 제가 도전을 원한다면 .. 방법이 있습니까 ?? –

+0

현재 코드로 로그인했는지 여부를 확인하는 방법이 보이지 않습니까? 몇 가지 방법, 지정된 폴더의 작은 파일, 레지스트리 항목 또는 db 필드가 있습니다. –

+0

모든 프로그램이 할 일은 목록에있는 자녀 이름을 선택하고 '로그인'을 클릭 한 다음 부모가 삭제 한 자녀가 저장됩니다 ... 부모가 자녀를 선택하면 간단하게 픽업을 한 시간과 부모가 선택한 시간을 말하면서 필드를 업데이트합니다. 나는 단지 중복을 원하지 않습니다. 그런 식으로 미래에 내가 아이를 뽑은 시간을 확인해야하는 경우 날짜를 조회 할 수있다 @ 그림을 확인한다. 나는 당신에게 약간의 아이디어를 줄 것이다. –

0

을 무엇의 이미지입니다 당신은 날짜 시간을 값을 삽입해야 업데이트 s :

cmd.Parameters.AddWithValue("@p2", DateTime.Parse(txtDateTime.Text)) 
cmd.Parameters.AddWithValue("@p3", DateTime.Today) 
+0

감사합니다. 저는 나머지 하하를 정리하기 전에 기본 작업을 수행하려고합니다. 가정용 프로그램은 최악의 부분입니다. –

관련 문제