2014-08-29 69 views
0

我有一個後端Access數據庫的前端視圖。我有一個保存和更新按鈕。每當我使用下面的保存代碼,它的作品,並將記錄添加到我的數據庫,並正確顯示它在datagridview中,如果我點擊該新創建的記錄上的更新按鈕,似乎記錄仍然在訪問中的「編輯」模式當我嘗試更新記錄時給我一個併發錯誤。我是否必須在下面保存後處理連接,如果是這樣,你能告訴我如何處理該連接或關閉訪問數據庫中的記錄嗎?唯一的解決方法是將application.restart()添加到我的保存按鈕的末尾,而我真的不想這麼做。vb.net保存記錄後處理DB連接

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 
     If tbAEU.Text = "" Or cbIA.Text = "" Or cbCI.Text = "" Or tbS.Text = "" Or tbD.Text = "" Then 
      MessageBox.Show("Please do not leave any field blank", "Validation") 
      Return 
     End If 
     cbAdded.Text = "No" 
     If intInc <> -1 Then 

      Dim cb As New OleDb.OleDbCommandBuilder(da) 
      Dim dsNewRow As DataRow 

      dsNewRow = ds.Tables("SDMDB").NewRow() 

      dsNewRow.Item("AffectedEndUser") = tbAEU.Text 
      dsNewRow.Item("IncidentArea") = cbIA.Text 
      dsNewRow.Item("ConfigItem") = cbCI.Text 
      dsNewRow.Item("Summary") = tbS.Text 
      dsNewRow.Item("Description") = tbD.Text 
      dsNewRow.Item("ActivityLog") = tbAL.Text 
      dsNewRow.Item("AddedtoSDM") = cbAdded.Text 

      ds.Tables("SDMDB").Rows.Add(dsNewRow) 

      da.Update(ds, "SDMDB") 

      MessageBox.Show("New Record added to the Database", "Save") 

      btnSave.Enabled = False 
      btnAdd.Enabled = True 
      btnDelete.Enabled = False 
      btnPWReset.Enabled = True 
      btnUnlock.Enabled = True 
      btnEdit.Enabled = True 
      btnCancel.Enabled = False 
      cbIA.Enabled = False 
      cbCI.Enabled = False 
      SetAllAsReadOnly() 
      UpdateDatabase() 
      Me.Refresh() 
      moveforward() 
      movebackward() 
     End If 
    End Sub 

連接代碼:

strDbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" 
      Dim sDrive As String, sDrives() As String 
      sDrives = ListAllDrives() 
      For Each sDrive In sDrives 
       Dim strTemp As String = sDrive & "\AppData\SDMDB\SDMDB.mdb" 
       If File.Exists(strTemp) Then 
        strDbSource = "Data Source = " & strTemp 
       End If 
      Next 
      con.ConnectionString = strDbProvider & strDbSource 

      con.Open() 

      strSQL = "SELECT * FROM SDM_Details" 
      da = New OleDb.OleDbDataAdapter(strSQL, con) 
      da.Fill(ds, "SDMDB") 

      con.Close() 
+0

我會建議任何呼叫連接包裹在「使用」的聲明,只是一個建議。 – Codexer 2014-08-29 17:29:16

+0

會解決這個問題嗎?這會關閉連接,從而允許我編輯相同的記錄嗎? – 2014-08-29 17:29:48

+0

是的,它會處理用於這些連接的資源並釋放它們。我沒有看到你的代碼更新,我在這裏錯過了什麼? – Codexer 2014-08-29 17:30:46

回答

2

正如Codexer先生說,你想用一個Using語句來處理您的連接。

我期望你真正想要從你的電話號碼成功保存後撥打ds.AcceptChanges()。這使DataSet和相應的表知道記錄不再髒。