У вас не может быть имени таблицы в предложении WHERE
вашего запроса (может быть хакерский способ сделать это, но в любом случае его не рекомендуется).
Если вы хотитечтобы выбрать данные из одной из нескольких таблиц, лучше всего динамически генерировать SQL с использованием VBA.Один из способов сделать это (особенно если вы хотите / хотите, чтобы ваш запрос открывался в представлении «Таблица данных» для конечного пользователя) - это создать «фиктивный» запрос, SQL-код которого можно заполнить с помощью выбора формы.
Например,Допустим, у нас есть 2 таблицы: tTable1
и tTable2
.Обе эти таблицы имеют один столбец с именем Language
.Вы хотите, чтобы пользователь выбирал данные из первой или второй таблицы с необязательным фильтром.
- Создайте форму с 2 полями со списком: один для таблиц и один с выбором критериев.Похоже, вы уже сделали этот шаг.
В этой форме есть кнопка, которая открывает запрос.Код для события press
этой кнопки должен выглядеть примерно так:
Private Sub cmdRunQuery_Click()
Dim sSQL As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
If Not IsNull(Me.cboTableName.Value) Then
sSQL = "SELECT * FROM " & Me.cboTableName.Value
If Not IsNull(Me.cboFilter.Value) Then
sSQL = sSQL & vbNewLine & _
"WHERE Language=""" & Me.cboFilter & """"
End If
Set db = CurrentDb
Set qdf = db.QueryDefs("qDummyQuery")
qdf.SQL = sSQL
DoCmd.OpenQuery qdf.Name
End If
End Sub
Обратите внимание, как генерируется SQL.Конечно, используя этот метод, вы должны защитить себя от SQL-инъекций: вы должны разрешить только предопределенные значения в поле со списком.Но это служит подтверждением концепции.
Если вам не нужно показывать результаты запроса, вам не нужно использовать фиктивный запрос: вы можете просто открыть набор записей на основе SQL и процессачто.