【问题标题】:Pass parameter to a query from another query in Access将参数传递给 Access 中另一个查询的查询
【发布时间】:2014-08-31 01:36:48
【问题描述】:

我有一个参数化查询 GET_CUSTOMER:

SELECT * FROM Customer WHERE id = [customer_id]

我想从另一个查询中调用这个查询并传递一个参数:

SELECT * FROM GET_CUSTOMER(123)

请注意,上面的代码无效,它是为了让您了解我正在尝试做什么。是否可以在 MS Access 中执行此操作?

更新 1:

例如,我发布的查询。实际的查询要复杂得多。我知道我可以使用表连接,但在我的特定情况下,如果我可以在其他查​​询(也已参数化)中运行参数化查询会容易得多。我无法使用访问表单,因为我在 .NET 应用程序中使用访问权限。

【问题讨论】:

  • 为什么?两个查询将返回相同的结果?我的意思是答案是肯定的。如果您打开一个新查询并执行Select GET_CUSTOMER.* FROM GET_CUSTOMER,它仍然会询问id 的参数。所以你可以把它当作原始查询一样传递。
  • 您可能更想加入表格。
  • 请始终包含所有标签。例如,除了我的编辑之外,您还应该包括 .net 的特定风格。
  • 我没有添加 .NET,因为它与我的具体问题无关。我的问题是将参数传递给 Access 中另一个查询的查询。
  • @andr111:Access 中的 QueryDef 对象可以看到构建它们的查询的参数。假设 Query2 是位于 GET_CUSTOMER 之上的查询;你可以编写类似这样的代码:QueryDefs("Query2").Parameters("customer_id") = 123,即使参数不属于顶层。因此,底层查询的参数可以被更高级别的参数访问(在我的脑海中,我不知道如果查询堆栈中有相同名称的参数会发生什么;我认为它们都是给定的设置参数后相同的值)。所以是的,可以做到。

标签: sql .net ms-access


【解决方案1】:

这就是我在 https://stackoverflow.com/a/24677391/303463 的帮助下最终解决这个问题的方法。事实证明,Access 在所有查询之间共享参数,因此无需专门将参数从一个查询传递到另一个查询。

查询1:

SELECT * FROM Customer WHERE ID > [param1] AND ID < [param2]

查询2:

SELECT * FROM Query1

VB.NET 代码:

    Dim ConnString As String = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=Database.mdb"
    Dim SqlString As String = "Query2"
    Using Conn As New OleDbConnection(ConnString)
        Using Cmd As New OleDbCommand(SqlString, Conn)
            Cmd.CommandType = CommandType.StoredProcedure
            Cmd.Parameters.AddWithValue("param1", "1")
            Cmd.Parameters.AddWithValue("param2", "3")
            Conn.Open()
            Using reader As OleDbDataReader = Cmd.ExecuteReader()
                While reader.Read()
                    Console.WriteLine(reader("ID"))
                End While
            End Using
        End Using
    End Using

【讨论】:

    【解决方案2】:

    您可以动态构建 SQL。

    MyID = prompt or get from user some ID
    
    strSQl = "Select * from tblCustomer where ID in " & _
           "(select * from tblTestCustomers where id = " & MyID
    

    因此您可以嵌套或使用一个查询的源将 ID 列表提供给第二个查询。

    【讨论】:

    • 我知道如何从 .NET 传递参数。我想了解的是是否可以将参数传递给另一个查询的查询。
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多