2016-11-15 9 views
0

ボタンをクリックすると実行されるクエリがあります。
データベースを更新するシステムdate = "DateColumn"の場合に設定します。
Else に挿入するには今日が今日の場合は、データベースを「更新」し、そうでなければ「挿入する」

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)を1日に1回使用します。

リーダーを使用して日付の列を確認する必要はありますか? 別の方法がありますか?私は正しい方向に向けるだけです。ここでこのコードは、今日の日付に等しい日付値を持つレコードのデータベースを検索します

+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:00(別名深夜)のタイムスタンプを持つデータベースにあなたの記録を保存していると仮定している。たとえば、保存されたレコードの時間が14:12(2:12 PM)の場合、「今日の」エントリの時間部分が何であるか分からないため、「今日の」レコードを見つけるのは難しいでしょう。

関連する問題