2017-03-20 9 views
0

クライアントがすでにサインインしているかどうかを確認しようとしていますが、新しいレコードを追加するのではなく、解決策を見つけるのに苦労している。 これは私が使用している現在のコードです:、クライアントはサインインしている場合、私は単純に、スクリプトを確認したいすでにレコードが存在していればレコードを更新する

 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 

そこに何の検証はありませんが、IVEは運と多くの異なるコードを試してみました。.. その後、与える他のエラー「既に署名したクライアントは、」彼がサインアウトすると、ちょうどサインアウトフィールドに 感謝

を更新これは、あなたが日時値を挿入すべきか私のプログラムは1

答えて

0

データベーステーブル(LogSheet)の構造を更新し、次のフィールドを追加します。 ClientNameSignInTimeSignInRelationSignOutTime、、クライアントが今日(CURRENTDATE)、次いでSignInTimeに署名されている場合CurrentDate

はあなたがSignOutTimeの値を読み込むことができ、値を持つことになります。

これは、あなたがそれをコーディングすることができ1つの可能な方法である:

このコードは未テストですが、あなたのアイデアを得る必要があります。

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

ありがとうございます、私は残りの部分を整理する前に、基本的な作業をしようとしています。それは最悪の部分である家庭用のプログラムです。 –

関連する問題