2016-03-11 114 views
0

我正在創建一個員工計時錶,他們必須通過按下timein和timeout按鈕來插入他們的計時錶。對於timein,我在數據庫中爲該人員創建了一條新記錄,對於超時,我正在使用UPDATING命令更新該現有記錄。這裏是我的代碼:VB.NET:更新Ms Access中的記錄

Dim cb As New OleDb.OleDbCommandBuilder(ssda) 
    cb.QuotePrefix = "[" 
    cb.QuoteSuffix = "]" 

    con.ConnectionString = dbProvider & dbSource 
    con.Open() 
    Dim str As String 
    str = "UPDATE emp_timing SET emp_timing.emp_timeout = '" & OnlyTime & "' WHERE (((emp_timing.emp_code)='" & TextBox1.Text & "') AND ((emp_timing.day)=" & Now.ToString("MM/dd/yyyy") & "))" 

    Dim cmd As OleDbCommand = New OleDbCommand(str, con) 


    Try 
     cmd.ExecuteNonQuery() 
     cmd.Dispose() 
     con.Close() 
     MsgBox("Data added") 

     TextBox1.Clear() 
     TextBox2.Clear() 
     TextBox1.Focus() 
     ComboBox1.SelectedIndex = -1 
    Catch ex As Exception 
     MsgBox(ex.Message) 

    End Try 

我的代碼工作正常,但問題是它沒有更新數據庫中的記錄。

Access中字段的數據類型: emp_code = Number,emp_timeout = Text,day = Date/Time。

+1

這是因爲你不使用參數,但你連接字符串離開轉換到任何的區域設置爲發生。 – Steve

+0

我應該如何解決這個問題? @Steve –

+0

您的字段是emp_timeout和datetime類型的日期嗎? – Steve

回答

0

像往常一樣,這是由於您的代碼沒有使用Parameters集合將值傳遞給數據庫引擎。這不是真正理解,直到你打一個轉換的問題,因爲總是與日期

str = "UPDATE emp_timing SET emp_timeout = @p1 " & _ 
     "WHERE emp_code = @p2 AND day = @p3" 


Using con = new OleDbConnection(dbProvider & dbSource) 
Using cmd = New OleDbCommand(str, con) 

    con.Open() 
    cmd.Parameters.Add("@p1", OleDbType.VarWChar).Value = OnlyTime 
    cmd.Parameters.Add("@p2", OleDbType.Integer).Value = Convert.ToInt32(TextBox1.Text) 
    cmd.Parameters.Add("@p3", OleDbType.Date).Value = new DateTime(Now.Year, Now.Month, Now.Day) 
    Try 
     Dim rowsAdded = cmd.ExecuteNonQuery() 
     if rowsAdded > 0 Then 
      MsgBox("Data added") 
      TextBox1.Clear() 
      TextBox2.Clear() 
      TextBox1.Focus() 
      ComboBox1.SelectedIndex = -1 
     End If 
    Catch ex As Exception 
     MsgBox(ex.Message) 

    End Try 
End Using 
End Using 
+0

當我按下按鈕時,它沒有響應 –

+0

是的,它終於成功了這是我的錯誤,非常感謝! –