根据数据绑定组合框中的选定项目从访问数据库中删除

Posted

技术标签:

【中文标题】根据数据绑定组合框中的选定项目从访问数据库中删除【英文标题】:Delete from access database based on selected item in databound combobox 【发布时间】:2012-02-02 12:50:19 【问题描述】:

我有一个使用 VB2010 和 MS 访问作为 DB 的数据绑定组合框。当我单击一个按钮时,组合框中的选定项目将从数据库中删除,并且不再显示在组合框中...

【问题讨论】:

如果你指的是 vb.net,最好这样说。 【参考方案1】:

这是一种方法:

创建一个名为 ComboDeleteExample 的表单,其中包含一个组合框和一个按钮。为了创建数据库,我只是将 SQL Server AdventureWorks 数据库 Products 表转储到 Microsoft Access 中。如果您没有 SQL Server 或 Adventure 作品,只需创建一个包含两列的 Product 表; ProductID (int) 和 Name varchar(25)。

将此代码复制到表单中:

Public Class ComboDeleteExample

    Const _ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\Database1.accdb;"
    Private dtProducts As New System.Data.DataTable("Products")

    Private Sub PopulateCombo()
        Using conn As New System.Data.OleDb.OleDbConnection(_ConnectionString)
            conn.Open()
            Dim sqlCmd As New System.Data.OleDb.OleDbCommand("select * from product", conn)
            Dim dr As System.Data.OleDb.OleDbDataReader = sqlCmd.ExecuteReader()
            dtProducts.Load(dr)
        End Using

        ComboBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", dtProducts, "ProductId", True, DataSourceUpdateMode.OnPropertyChanged))
        ComboBox1.DisplayMember = "Name"
        ComboBox1.DataSource = dtProducts
    End Sub

    Private Sub ComboDeleteExample_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        PopulateCombo()
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If ComboBox1.SelectedItem IsNot Nothing AndAlso TypeOf (ComboBox1.SelectedItem) Is System.Data.DataRowView Then
            Using conn As New System.Data.OleDb.OleDbConnection(_ConnectionString)
                conn.Open()
                Dim row As System.Data.DataRowView = DirectCast(ComboBox1.SelectedItem, System.Data.DataRowView)
                Dim sqlcmd As New System.Data.OleDb.OleDbCommand(String.Format("delete * from product where productid=0", row.Item("ProductID")), conn)
                If sqlcmd.ExecuteNonQuery() = 1 Then
                    row.Delete()
                    dtProducts.AcceptChanges()
                End If
            End Using
        End If
    End Sub
End Class

【讨论】:

当我单击按钮时,出现一个错误,表示查询表达式中的语法错误 If sqlcmd.ExecuteNonQuery() = 1 那么是什么原因导致的... 验证上面的 SQL 语句是否正确。如果您没有正确绑定组合框,则该行上不会有 ProductId 的设置值。您可以使用 String.Format("delete * from product where productid=0", row.Item("ProductID")) 并在即时窗口中对其进行评估;它应该生成一个可以在 Microsoft Access 中执行的有效 SQL。同样,您可以查询 row.Item("ProductID")) 的值

以上是关于根据数据绑定组合框中的选定项目从访问数据库中删除的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 DataGridView 中的选定行将组合框中的特定项目设置为选定项?

从绑定到数据集的组合框中删除重复项

Vba代码显示组合框中选定的数据

PyQt4-如何制作一个按钮来删除组合框中的选定项目?

JavaFX - 从其他组合框中删除所选项目

如何从 Java 的组合框中删除特定项目?