编写动态SQL语句

时间:2015-01-22 16:14:46

标签: sql ms-access dynamic-sql

我是Microsoft Access的新手。

我想根据参数的值从表中选择一列(即我的表有列x,y和z,我有一个chosencol参数,由用户使用下拉列表设置

我可以使用select命令选择一个/所有列,但是,我想使用我的参数chosencol代替。

阅读后,我发现了许多使用SETEXEC命令的引用,但是,将它们输入Access中的SQL命令只会产生错误。

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

2 个答案:

答案 0 :(得分:4)

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

Here is your table in Access

接下来,我创建了一个示例表单来查询您的值。下拉列表称为'selectedcol'。从Column Select下拉列表中选择一个值,然后按“Lookup Value”按钮。

Here is your Access form

以下是“查找值”按钮的“点击”事件下的代码。使用您选择的列动态构建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行的数据。

答案 1 :(得分:1)

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

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

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

如果selectedcol是一个多选下拉列表,那么您必须将所选值读入一个数组,然后将该数组写入一个连接字符串并改为使用它。