У меня есть база данных доступа, содержащая таблицу под названием «Элементы». У меня есть несколько небольших баз данных, которые также содержат таблицу «Элементы». Каждый из них имеет первичный ключ с именем «ID», и дубликатов нет.Невозможно записать изменения в базу данных доступа после слияния таблицы
Следующий код появляется успешно объединить (если ставить точки останова до и после слияния dsi.Tables («Items»). Rows.Count увеличивается, но фактическая база не изменилась.
Помощь !!
Благодаря Энди
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim dsicmd, dsacmd As OleDbDataAdapter
Dim dsi, dsa, dsc As New DataSet
Dim strSelect As String
Dim strConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\TEMP\data\Account Data.mdb"
Dim strC2 As String
Dim cn, cn2 As OleDbConnection
Dim cmd As OleDbCommandBuilder
' ** Items
cn = New OleDbConnection(strConnection)
cn.Open()
strSelect = "SELECT * FROM Items"
dsicmd = New OleDbDataAdapter(strSelect, cn)
dsicmd.Fill(dsi, "Items")
For Each f In My.Computer.FileSystem.GetFiles("d:\temp\data", FileIO.SearchOption.SearchTopLevelOnly, "*.mdb")
If Not f.Contains("Account") Then
strC2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & f
cn2 = New OleDbConnection(strC2)
cn2.Open()
strSelect = "SELECT * FROM Items"
dsacmd = New OleDbDataAdapter(strSelect, cn2)
dsa.Clear()
dsacmd.Fill(dsa, "Items")
dsi.Merge(dsa, False, MissingSchemaAction.Add)
dsa.Dispose()
cn2.Close()
End If
Next
cmd = New OleDbCommandBuilder(dsicmd)
dsicmd.UpdateCommand = cmd.GetUpdateCommand
dsicmd.InsertCommand = cmd.GetInsertCommand
dsicmd.Update(dsi, "Items")
cn.Close()
dsi.Dispose()
dsc.Dispose()
dsicmd.Dispose()
dsacmd.Dispose()
cn.Dispose()
cn2.Dispose()
End Sub
End Class
Почему вы используете False в этом утверждении: 'dsi.Merge (dsa, False, MissingSchemaAction.Add)' – cha
Привет! Я использовал False, поскольку это было в примере, который я нашел в MSDN. Я тоже пробовал Истину, и это не имеет никакого значения. –
Я думаю, вам нужно вызвать 'dsi.AcceptChanges()' вместо всех этих строк: 'CMD = Новый OleDbCommandBuilder (dsicmd) dsicmd.UpdateCommand = cmd.GetUpdateCommand dsicmd.InsertCommand = cmd.GetInsertCommand dsicmd.Update (DSI , "Элементы") ' – cha