编写动态 SQL 语句

Writing Dynamic SQL Statement

我是 Microsoft Access 的新手。

我想根据参数值 select table 中的一列(即我的 table 有 x、y 和 z 列,我有 chosencol 用户使用下拉菜单设置的参数。

我可以使用 select 命令 select 一个/所有列,但是,我想使用我的参数 chosencol 来做到这一点。

仔细阅读后,我发现了一些关于使用 SETEXEC 命令的参考资料,但是,将它们输入到 Access 中的 SQL 命令中只会产生错误。

有人可以告诉我如何在 Access 中实现动态-sql 查询(非常详细,因为我认为我现在在错误的地方编写命令...... )

我很确定你不能直接做到这一点 SQL。但是,您可以在 VBA 代码中创建 SQL 字符串并将其保存为查询。

CurrentDB.CreateQueryDef("MyQueryName", "SELECT " & chosencol & " FROM MyTable")

现在,MyQueryName 将成为您数据库中的永久查询,您可以在任何需要的地方引用它。

如果 chosencol 是一个多 select 下拉列表,您必须将 selected 值读入一个数组,然后将该数组写入一个连接的字符串并使用它。

首先,我在 Access 中创建了一个示例 table。

接下来,我创建了一个示例表单来查询您的值。下拉列表称为 'chosencol'。 Select 列 Select 下拉列表中的一个值,然后按 "Lookup Value" 按钮。

下面是 "Lookup Value" 按钮的 On Click 事件下的代码。 SQL 语句是使用您选择的列动态构建的。该列已重命名为 [FieldName],以便它可以被引用。

Private Sub btnLookup_Click()
    Dim rsLookup As New ADODB.Recordset
    Dim strSQL As String
    strSQL = "select " & chosencol.Value & " as [FieldName] from Table1 where ID=1"
    rsLookup.Open strSQL, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
    If rsLookup.EOF = False Then
        txtValue.SetFocus
        txtValue.Text = rsLookup![FieldName]
    End If
    rsLookup.Close
End Sub

按下按钮时,将返回您选择的任何列的值。对于这个简单的示例,我总是返回第 1 行的数据。