2017-03-20 72 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)的結構以包含以下字段。 ClientNameSignInTimeSignInRelationSignOutTime,,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

我不明白你是如何檢查他們是否登錄或不使用你當前的代碼?有幾種方法可以做到這一點,小文件在指定的文件夾,註冊表項或數據庫字段。 –

+0

所有的程序要做的是,他們將在列表中選擇他們的孩子的名字,點擊「登錄」和時間和哪個父母放棄他們將被保存...當父母拿起他們時,我只是想更新字段,說明他們在什麼時候拿到,哪個父母拿起他們..我只是不想重複。這種方式在未來我可以查找一個日期,如果我需要看看什麼時候一個孩子被選中@檢查我給你一個想法的圖片 –

0

什麼圖像,您應該插入日期時間值s:

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

謝謝,我試圖讓我的基礎工作,然後我清理剩下的哈哈。它的家庭使用方案是最糟糕的部分。 –

相關問題