Sql 从DataGridView更改更新Access数据库

Sql 从DataGridView更改更新Access数据库,sql,vb.net,datagridview,oledb,oledbdataadapter,Sql,Vb.net,Datagridview,Oledb,Oledbdataadapter,我需要在更改我的DataGridView调用的DataGridView\u Manage\u Calculations后更新Access数据库,然后单击按钮调用的按钮\u update 以下是我目前掌握的代码: Dim dtManage As New DataTable Dim ManageAdapter As OleDbDataAdapter Dim Bsource As New BindingSource Public Sub Show_Panel_Manage_Calculations(

我需要在更改我的
DataGridView
调用的
DataGridView\u Manage\u Calculations
后更新Access数据库,然后单击
按钮
调用的
按钮\u update

以下是我目前掌握的代码:

Dim dtManage As New DataTable
Dim ManageAdapter As OleDbDataAdapter
Dim Bsource As New BindingSource

Public Sub Show_Panel_Manage_Calculations()
    Panel_Manage_Calculations.Show()

    ManageAdapter = New OleDbDataAdapter("Select Calculation, [Interval], Formula From " & tblName & "", con)
    dtManage.Clear()
    ManageAdapter.Fill(dtManage)
    Bsource.DataSource = dtManage
    DataGridView_Manage_Calculations.DataSource = Bsource

End Sub

Private Sub Button_Update_Click(sender As Object, e As EventArgs) Handles Button_Update.Click
    Dim ObjComander As New OleDbCommandBuilder(ManageAdapter)
    ManageAdapter.Update(dtManage)
End Sub
我得到这个错误:
INSERT INTO语句中的语法错误。

我做错了什么

其他信息

Public Sub createTable_Criteria()
    Dim cmd As New OleDb.OleDbCommand("CREATE TABLE " & tblName & "(" & "Calculation Text(10) NOT NULL," & "[Interval] Text NOT NULL," & "Formula Text," & "Tier_Juncture_1 Integer," & "Tier_Juncture_2 Integer," & "Tier_Juncture_3 Integer," & "Weight Integer, CONSTRAINT pk_Calculation PRIMARY KEY (Calculation, [Interval]));", con)
    cmd.ExecuteNonQuery()
End Sub

查看错误消息中的信息,SELECT查询似乎没有在SELECT语句中返回表的主键。在这种情况下,OleDbCommandBuilder不生成所需的INSERT命令

您有两个选择:

  • 返回所选表的主键
  • 为适配器创建自己的插入/更新/删除命令

我不知道您的表的结构(给定DINAMICAL构造的select),但最好的方法是在select语句中返回主键

您可以尝试在UPDATE命令上放置断点,并尝试查看适配器内的INSERTCOMAND.CommandText属性。你能给我看一下文本吗?@Steve我不太确定你建议我看的是什么。@Steve我理解调试和断点。我只是不明白你到底建议我看什么。OleDbDataAdapter包含一个名为InsertCommand的属性,该属性由OleDbCommandBuilder使用Update语句使用的命令准备。InsertCommand包含属性CommandText,根据错误消息,此文本是错误的。查看它可能是理解错误原因的基础。听起来不错。如何在select语句中返回主键?请检查数据库中的表,并将该字段添加到select语句中。例如,如果您的表有一个自动编号字段,则该字段可能也是primarykey。(桌子设计中的小键)。将该字段添加到select。我明白你的意思。我的主键由字段
计算
[间隔]
组成。这些已在select语句中返回。我已将用于创建表的代码添加到我的原始帖子中。在创建OleDbAdapter之后,我将尝试直接将OleDbCommandBuilder的初始化移动到
Show\u面板\u Manage\u Calculations
方法中,该方法应该是从上面的代码中看不到的。我想帮忙,但我没有更多的想法。你介意分享这个项目吗?如果是,请在共享主机(如gdrive、skydrive、dropbox)上压缩并发布项目和数据库,并在此处发布链接。