【问题标题】:Querying 2 tables using dataset in Visual basic在 Visual Basic 中使用数据集查询 2 个表
【发布时间】:2013-02-01 18:24:36
【问题描述】:

我的 Visual Basic 项目需要帮助。我有一个 Store.accdb 数据库 其中有 2 张桌子,客户和订单。我希望能够在文本框中输入客户的姓名(或姓名的一部分),然后在单击搜索按钮时在 DataGridView 中显示姓名。然后在单独的 DataGridView 上,当用户单击“显示”按钮时,我想从我的第一个 DataGridView 中显示所选客户的订单。

编辑:这就是两张桌子的样子

客户表 = custNum、custName、custAddress、custPhone

订单表 = orderNum, orderItem, custNum, price, qty

con.ConnectionString = dbProvider & dbSource

    Try
        con.Open()
        sql = "SELECT custName FROM tblCustomers WHERE custName LIKE '%" & tbSearch.Text.ToUpper & "%'"
        ds = New DataSet
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "CustomerDataset")
        gridCustomers.DataSource = ds
        gridCustomers.DataMember = "CustomerDataSet"

        con.Close()


    Catch ex As Exception
        MessageBox.Show("Could not establish a connection", "Database Error")
    End Try

此代码运行良好,它填充了我的客户 datagridview。每当我只输入客户姓名的一部分时,我就会得到多行。如果我在文本框中输入“sm”,它将显示所有名称中带有“sm”的客户。当我单击显示按钮时,如何在我的第二个 datagridview 中显示所选客户(来自第一个 datagridview)的订单?我希望我是有道理的,英语不是我的第一语言,所以请多多包涵。

谢谢!

【问题讨论】:

    标签: sql vb.net dataset


    【解决方案1】:

    其实你只需要在两个表之间定义一个“外键”,可以看这篇文章知道怎么做:

    www.codeproject.com/Articles/28273/Xml-Database-Demo

    阅读“添加数据表关系”部分。

    如果您使用 Access 创建了数据库,则必须做同样的事情。如果您使用 SQL,则同样如此。

    【讨论】:

      【解决方案2】:

      第 1 步 - 更改有效的查询。不要只选择客户名称,而是选择客户 ID 或该表的主键。

      第 2 步 - 在显示您的数据时,添加一个带有查询字符串的锚标记,该查询字符串链接到显示订单的新页面。 html 应该如下所示:

      <a href="orders.aspx?customer_id=1">Fred</a>
      

      在 orders.aspx 中,调用一个查询,返回 customer_id = 1 的所有订单。

      哦,是的,顺便说一下,在将所有表单和 url 变量发送到数据库之前,将它们转换为参数。

      【讨论】:

        【解决方案3】:

        您必须参加许多活动。 从datagridview 选择客户时,您必须使用datagridview's selectedIndexChange 事件(假设您在datagridview 中有选择按钮)
        您必须在datagridview's selectedIndexChange 事件中使用相同的程序

        con.ConnectionString = dbProvider & dbSource
        
        Try
            con.Open()
            sql = "SELECT * FROM tblorders WHERE custName ='" & gridSelectedValue & "'"
            //Assuming you have custName column in order table
            ds = New DataSet
            da = New OleDb.OleDbDataAdapter(sql, con)
            da.Fill(ds, "OrderDataset")
            gridCustomers.DataSource = ds
            gridCustomers.DataMember = "OrderDataset"
        
            con.Close()
        
        
        Catch ex As Exception
            MessageBox.Show(ex.message)
        End Try
        

        编辑
        如果您没有按顺序 然后 有 custName,则您的 DataGridView 查询中应该有 CustNum。

        【讨论】:

        • 我的订单表中没有 custName。这是 2 个表的样子 Customers table = custNum, custName, custAddress, custPhone Orders table = orderNum, orderItem, custNum, price, qty
        猜你喜欢
        • 2013-04-11
        • 2021-11-02
        • 2012-11-01
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多