У меня есть база данных, созданная в MS Access 2016 с несколькими таблицами.Теперь я хочу обновить таблицы, но каждый раз, когда я получаю сообщение об ошибке, таблица не может найти столбец.Но упомянутая колонка всегда находится в другой таблице.Если я удаляю обновление для упомянутой таблицы столбца, ему будет присвоено имя другого столбца, которого у него нет.
Я работаю с Visual Basic 2017, обновленным до сегодняшнего дня.
Моя база данных выглядит так;все таблицы начинаются с tb, все остальные - строки. У меня есть таблицы / строки;
tbAuthorizations
- AuthorizationID
- rwAuthorization (это будет использоваться в качестве источника для таблицы tbUsersAuthorizations / rwSetUser, rwSetData, rwSetSettings, rwSetReports
tbLocalDataFolder
- LocalDataBaseID
- rwLocation
tbServerDataFolder
- ServerDatabaseID
- rwDatabase
- rwLocation
tbUserAuthorizations
- UserAuthorizationID
- rwAuthUser = Поиск / отношение tbUsers - rwUserID
- rwSetUser = Поиск / отношениеtbAuthorizations - AuthorizationID
- rwSetData = Поиск / отношение tbAuthorizations - AuthorizationID
- rwIncludeFixData
- rwSetSettings = Поиск / отношение tbAuthorizations - AuthorizationID
- rwSetReports = Поиск / отношение tbAuthorizations - AuthorizationID
tbUsers
- UserID
- rwUser (используется в качестве источника дляtable tbUsersAuthorizations - rwUser)
- rwInlogName
- rwPassword
- rwSercretQuestion
- rwSecretAnswer
- rwEmail
- 1080w
- rwWindowsUser
- rwPasswordLogin
- rwHoldOnStart
- rwRememberName
- rwRememberPassword
Мой полный код выглядит ниже, где яупомянул, где я получил ошибку исключения.В качестве примера я попытался обновить все и постоянно получаю сообщение об ошибке rwUser.Но если я удалю таблицу, в которой находится rwUser, я получу ту же ошибку, но только с отсутствующим именем другого столбца.
Если я использую только обновление таблицы с этим столбцом, он будет обновлен.Но только с несколькими таблицами я получаю ошибки.Как будто он не разделяет столбцы и имена строк в адаптере или наборе и т. П.
blic Class Form1
Dim con As New OleDb.OleDbConnection
Dim dbProvider As String
Dim dbSource As String
Dim dbFolder As String
Dim dbName As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dbProvider = "PROVIDER=MICROSOFT.ACE.OLEDB.12.0;"
dbName = "D:\SystemSettings.accdb"
dbSource = "DATA SOURCE = " & dbName
con.ConnectionString = dbProvider & dbSource
con.Open()
da = New OleDb.OleDbDataAdapter("SELECT * FROM tbAuthorizations", con)
da.Fill(ds, "AuthDB")
da.SelectCommand.CommandText = "SELECT * FROM tbLocalDataFolder"
da.Fill(ds, "LocalDB")
da.SelectCommand.CommandText = "SELECT * FROM tbServerDataFolder"
da.Fill(ds, "ServerDB")
da.SelectCommand.CommandText = "SELECT * FROM tbUserAuthorizations"
da.Fill(ds, "UserAuthDB")
da.SelectCommand.CommandText = "SELECT * FROM tbUsers"
da.Fill(ds, "UsersDB")
con.Close()
End Sub
Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow
Try
dsNewRow = ds.Tables("AuthDB").NewRow()
dsNewRow.Item("rwAuthorization") = txtNaam.Text
ds.Tables("AuthDB").Rows.Add(dsNewRow)
da.Update(ds, "AuthDB") 'exception error; DataCollumn rwUser in DataTable AuthDB for SourceCollumn rwUser doesn't excist
dsNewRow = ds.Tables("LocalDB").NewRow()
dsNewRow.Item("rwDatabase") = txtNaam.Text
dsNewRow.Item("rwLocation") = TxtGeboorteplaats.Text
ds.Tables("LocalDB").Rows.Add(dsNewRow)
da.Update(ds, "LocalDB") ''exception error; DataCollumn rwUser in DataTable LocalDB for SourceCollumn rwUser doesn't excist
dsNewRow = ds.Tables("ServerDB").NewRow()
dsNewRow.Item("rwDatabase") = txtNaam.Text
dsNewRow.Item("rwLocation") = TxtGeboorteplaats.Text
ds.Tables("ServerDB").Rows.Add(dsNewRow)
da.Update(ds, "ServerDB") ''exception error; DataCollumn rwUser in DataTable ServerDB for SourceCollumn rwUser doesn't excist
dsNewRow = ds.Tables("UserAuthDB").NewRow()
dsNewRow.Item("rwAuthUser") = 1
dsNewRow.Item("rwSetUser") = 1
ds.Tables("UserAuthDB").Rows.Add(dsNewRow)
da.Update(ds, "UserAuthDB") ''exception error; DataCollumn rwUser in DataTable UserAuthDB for SourceCollumn rwUser doesn't excist
dsNewRow = ds.Tables("UsersDB").NewRow()
dsNewRow.Item("rwUser") = txtNaam.Text
dsNewRow.Item("rwInlogName") = TxtGeboorteplaats.Text
ds.Tables("UsersDB").Rows.Add(dsNewRow)
da.Update(ds, "UsersDB") ''No exception error
Catch ex As Exception
Dim s As String
s = ex.StackTrace
End Try
End Sub
End Class
Изменен код на;
Дорогие все,
Я нашел способ заставить его работать, но не уверен, что в итоге это не создаст проблем, таких как разница между столбцом / строкой между DS и базой данных.Если тогда набор данных, Dataadapter и база данных синхронизированы.
Теперь я объединил ds.tables с запросом на вставку.ds.tables уже был обновлен в приведенном выше коде.Но у меня проблема с da.update, и для этого da.update я хочу использовать запрос, поэтому у меня есть
Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow
Dim query As String
Dim i As Integer
Try
dsNewRow = ds.Tables("UsersDB").NewRow()
dsNewRow.Item("rwUser") = txtNaam.Text
dsNewRow.Item("rwInlogName") = TxtGeboorteplaats.Text
ds.Tables("UsersDB").Rows.Add(dsNewRow)
query = "INSERT INTO tbLocalDataFolder (rwDatabase,rwLocation) VALUES ('" & txtNaam.Text & "','" & TxtGeboorteplaats.Text & "')"
executquery(query, con)
dsNewRow.Item("rwDatabase") = txtNaam.Text
dsNewRow.Item("rwLocation") = TxtGeboorteplaats.Text
ds.Tables("LocalDB").Rows.Add(dsNewRow)
query = "INSERT INTO tbLocalDataFolder (rwDatabase,rwLocation) VALUES ('" & txtNaam.Text & "','" & TxtGeboorteplaats.Text & "')"
executquery(query, con)
Catch ex As Exception
Dim s As String
s = ex.StackTrace
End Try
End Sub
Public Sub executquery(query As String, connec As OleDb.OleDbConnection)
Dim commandOleDb As New OleDb.OleDbCommand(query, connec)
con.Open()
commandOleDb.ExecuteNonQuery()
con.Close()
End Sub