Writing Dynamic SQL Statement

好久不见. 提交于 2019-12-13 06:50:05

问题


I am very new to Microsoft Access.

I would like to select a column from a table based on the value of a parameter (i.e. my table has columns x, y and z and I have a chosencol parameter which is set by the user using a dropdown.

I can select one / all of the columns using a select command, however, I would like to do this using my parameter chosencol instead.

Having read around, I have found a number of references to using the SET and EXEC commands, however, entering them into the SQL command in Access just yields errors.

Please could someone advise me as to how I go about implementing a dynamic-sql query in Access (in fine detail as I think I am writing the commands in the wrong place at the moment...)


回答1:


First I created an example table in Access.

Next, I created an example form to query your value. The dropdown is called 'chosencol'. Select a value from the Column Select dropdown and press the "Lookup Value" button.

Here is the code under the "Lookup Value" button's On Click event. A SQL statement is dynamically built with the column you chose. The column is renamed to [FieldName] to that it can by referenced.

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

When the button is pushed, the value from whatever column you selected will be returned. For this simple example, I'm always returning row 1's data.




回答2:


I'm pretty sure you can't do that in straight SQL. However, you can create the SQL string in VBA code and save it as a query.

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

Now, MyQueryName will be a permanent query in your database and can be referenced wherever you want.

If chosencol is a multi-select dropdown, you'll have to read the selected values into an array and then write the array to one concatenated string and use that instead.



来源:https://stackoverflow.com/questions/28093543/writing-dynamic-sql-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!