Я новичок в программировании, но учусь и исследую много раз без какого-либо курса, поэтому я часто сталкивался с проблемой. Stack Overflow - это правильное место для решения моей проблемы.
На этот раз я обновил datagridview до файла .dbf для другого приложения, в котором используется база данных .dbf. Поэтому, пожалуйста, дайте мне лучшее решение для подготовки моего приложения.
Моя ошибка: "Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, который не возвращает никакой информации о ключевом столбце".
‹ Мой код приведен ниже.
Dim con As New OleDbConnection
Dim ds As New DataSet
Dim dt As New DataTable
Dim da As New OleDbDataAdapter
Dim con1 As New OleDbConnection
Dim ds1 As New DataSet
Dim dt1 As New DataTable
Dim da1 As New OleDbDataAdapter
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
con.ConnectionString = "Provider=vfpoledb.1;Data Source=C:\dbf_folder;Collating Sequence=machine;"
con.Open()
ds.Tables.Add(dt)
da = New OleDbDataAdapter("Select * from voterlist.dbf", con)
da.Fill(dt)
dbfdatagrid.DataSource = dt.DefaultView
con.Close()
End Sub
Private Sub btnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnupdate.Click
con1.Close()
con1.ConnectionString = "Provider=vfpoledb.1;Data Source=C:\dbf_folder1;Collating Sequence=machine;"
con1.Open()
da1 = New OleDbDataAdapter("Select * from voterlist.dbf", con1)
Dim cb = New OleDbCommandBuilder(da1)
Dim primaryKey(1) As DataColumn
primaryKey(1) = dt1.Columns("areaid")
dt1.PrimaryKey = primaryKey
da1.Fill(dt)
dt.Merge(dt1)
da1.Update(dt)
End Sub
Fill
установите дляMissingSchemaAction
адаптера данных значениеAddWithKey
. - person jmcilhinney   schedule 04.05.2018New
. Это НЕ часть декларации. Он фактически создает новый объект. Почему вы создаете два адаптера данных при создании формы, затем еще один при извлечении данных и еще один при сохранении? Вам нужен только один адаптер данных, поэтому избавьтесь от одной из переменных и используйте ключевое словоNew
только один раз. Вам также не нужны два разных объекта соединения. Если вы собираетесь создавать объекты по мере их использования, не используйте переменные-члены. - person jmcilhinney   schedule 04.05.2018DataSets
? Все, что вам нужно, это одинDataTable
. Избавьтесь от всехDataSets
и одного изDataTables
. Создайте одинDataTable
и передайте его вызовуFill
при запуске, а затем передайте тот жеDataTable
вызовуUpdate
при сохранении. - person jmcilhinney   schedule 04.05.2018