2016-11-15 48 views
0

我有一個按鈕單擊運行的查詢。
我想設置它,所以如果系統日期=「DateColumn」來更新數據庫。
其他 插入。如果日期是今天,請「更新」數據庫,否則「插入」

Dim provider As String 
    Dim dataFile As String = My.Application.Info.DirectoryPath 
    provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" 
    dataFile = ("Database\Base-Original.accdb") 

    Using myconnection As New OleDbConnection(provider & dataFile) 
     myconnection.Open() 

     Dim sqlQry1 As String = "INSERT INTO [Table] ([Column1], [Column2], [Column3], [Column4], [Date]) VALUES (@1, @2, @3, @4, @5)" 

     Using cmd As New OleDbCommand(sqlQry1, myconnection) 
      cmd.Parameters.AddWithValue("@1", Combobox1.SelectedItem.ToString) 
      cmd.Parameters.AddWithValue("@2", textbox1.Text) 
      cmd.Parameters.AddWithValue("@3", Textbox2.Text) 
      cmd.Parameters.AddWithValue("@4", Combobox2.SelectedItem.ToString) 
      cmd.Parameters.AddWithValue("@5", Date.Now.ToShortDateString) 

      If cmd.ExecuteNonQuery() Then 
       myconnection.Close() 
       MsgBox("successfull. ", MsgBoxStyle.Information, "Record Saved") 
      Else 
       MsgBox("failed. ", MsgBoxStyle.Critical, "Registration failed") 
       Return 
      End If 

     End Using 

    End Using 

我有INSERT INTO,但我不知道如何去更新數據庫,而不是插入新記錄......我不知道如何更新,但我想有1項紀錄列名(Column1)每天一次。

我是否需要使用reader來檢查日期列? 還是有另一種方式去...我只需要指出正確的方向。
〜非常感謝..

+0

你爲什麼不檢查是否有這樣的記錄,並據此採取行動? 'AddWithValue'是一個不錯的主意並且保存日期爲字符串是一個非常非常糟糕的主意 – Plutonix

+0

我不知道如何去做。我知道我應該檢查是否有記錄與column1和date.today然後使用,如果有,更新它,如果沒有創建新的。 – Taffs

+1

然後,這就是你需要研究。 http://www.tutorialspoint.com/sql/ – Plutonix

回答

0

這裏該代碼將搜索具有日期值等於今天的日期記錄數據庫(見下面重要說明)。如果找到了一個,則更新值字段並將其保存回數據庫。

Private Sub SOExample2() 
    Using myconnection As New OleDbConnection(provider & dataFile) 
     myconnection.Open() 
     Dim TodaysRecordSQL As String = String.Format("SELECT [Column1], [Column2], [Column3], [Column4], [Date] FROM [Table] WHERE [Date] = '{0:o}' ORDER BY [Date] DESC", Date.Today.Date) 
     Dim UpdateDS As New DataSet 
     Using UpdateDA As New OleDb.OleDbDataAdapter(TodaysRecordSQL, myconnection) 
      UpdateDA.Fill(UpdateDS) 
     End Using 
     Dim UpdateTable As DataTable = UpdateDS.Tables("Table") 
     If UpdateTable IsNot Nothing AndAlso UpdateTable.Rows.Count = 1 Then 
      ' Update existing record 
      Dim UpdateRow As DataRow = UpdateTable.Rows(0) 
      UpdateRow("Column1") = "NewValue1" 
      UpdateRow("Column2") = "NewValue2" 
      Using UpdateDA As New OleDb.OleDbDataAdapter() 
       Using UpdateCmd As New OleDb.OleDbCommand() 
        UpdateCmd.Connection = myconnection 
        UpdateCmd.CommandText = "UPDATE [Table] SET [Column1] = @1, [Column2] = @2, [Column3] = @3, [Column4] = @4 WHERE [Date] = @5" 
        Dim UpdateParam As OleDb.OleDbParameter = New OleDb.OleDbParameter() 
        UpdateParam.ParameterName = "@1" 
        UpdateParam.SourceColumn = "Column1" 
        UpdateCmd.Parameters.Add(UpdateParam) 

        UpdateParam = New OleDb.OleDbParameter() 
        UpdateParam.ParameterName = "@2" 
        UpdateParam.SourceColumn = "Column2" 
        UpdateCmd.Parameters.Add(UpdateParam) 

        UpdateParam = New OleDb.OleDbParameter() 
        UpdateParam.ParameterName = "@3" 
        UpdateParam.SourceColumn = "Column3" 
        UpdateCmd.Parameters.Add(UpdateParam) 

        UpdateParam = New OleDb.OleDbParameter() 
        UpdateParam.ParameterName = "@4" 
        UpdateParam.SourceColumn = "Column4" 
        UpdateCmd.Parameters.Add(UpdateParam) 

        UpdateParam = New OleDb.OleDbParameter() 
        UpdateParam.ParameterName = "@5" 
        UpdateParam.SourceColumn = "Date" 
        UpdateCmd.Parameters.Add(UpdateParam) 

        UpdateDA.UpdateCommand = UpdateCmd 
        UpdateDA.Update(UpdateDS) ' This does the actual updating of the modified rows in the DataSet 
       End Using 
      End Using 
     Else 
      ' Insert new record 
     End If 
    End Using 
End Sub 

注:此代碼假設你正在使用的00小時(又名午夜)時間戳保存記錄到數據庫中。作爲一個例子,如果保存的記錄的時間爲14:12(2:12 PM),那麼找到「今天」記錄會比較棘手,因爲您不知道「今天」條目的時間部分可能是什麼。

相關問題