2014-08-29 3 views
0

У меня есть внешний вид Бэкэнд Access DB. У меня есть кнопка «Сохранить и обновить». Всякий раз, когда я использую приведенный ниже код сохранения, он работает и добавляет запись в мою базу данных и отображает ее правильно в datagridview, если я нажимаю кнопку обновления на вновь созданной записи, кажется, что запись все еще находится в режиме «EDIT» при доступе, давая мне ошибку параллелизма, когда я пытаюсь сделать обновление записи. Должен ли я отключить соединение после сохранения ниже, если это так, вы можете показать мне, как удалить это соединение или закрыть запись в db доступа? Единственное исправление, которое работает, это добавить 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

+0

Это исправить эту проблему? Будет ли это закрывать соединение, позволяя мне редактировать эту же запись? –

+0

Да, он будет распоряжаться ресурсами, используемыми для этих соединений, и освобождать их. Я не вижу ваш код для обновления, я что-то упустил? – Codexer

ответ

2

Как сказал г-н Codexer, вы хотели бы использовать Using заявление выбрасывайте связи.

Я надеюсь, что вы действительно хотите от вас позвонить по телефону ds.AcceptChanges() после успешного сохранения. Это позволяет DataSet и соответствующим таблицам знать, что записи больше не загрязнены.

Смежные вопросы