не удалось обновить сетку данных до dbf с помощью vb.net - PullRequest
0 голосов
/ 04 мая 2018

Я новичок в программировании, но изучаю и изучаю много раз без какого-либо курса, поэтому я столкнулся с проблемой во многих случаях. Stack Over flow - подходящее место для решения моей проблемы.

На этот раз я обновил 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

1 Ответ

0 голосов
/ 04 мая 2018

Вам необходимо указать DataSet / DataTable первичный ключ:

' For dataset DS, assumed there is one table
Dim PrimaryKey(1) As DataColumn
PrimaryKey(1) = ds.Tables(0).Columns("ID")
DS.Tables(0).PrimaryKey = PrimaryKey

' For DataTable DT
Dim PrimaryKey(1) As DataColumn
PrimaryKey(1) = dt.Columns("ID")
dt.PrimaryKey = PrimaryKey

Обновление

Вы используете правильный драйвер, вам нужно создать уникальный столбец в DBF. Для этого выполните этот SQL в DBF перед его использованием:

ALTER TABLE voterlist ALTER COLUMN areaid INT UNIQUE (I assume an integer column, if character, areaid C(somenumber) where somenumber is the size of the column)

Это создаст индекс для столбца areaid, который будет (должен) использоваться в качестве первичного ключа.

...