Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






О присвоении параметров при открытии Recordset




Часто используются запросы, включающие значения полей форм. Обычно их включают в условия отбора.

Однако, если Вы попробуете открыть Recordset на основе такого запроса, то Access даст сообщение об ошибке: "Указаны не все параметры...". Эти параметры как раз поля из форм.

Ниже приводится простейшая функция, подставляющая значения параметров (полей форм) в запрос.

'Открытие Recordset на базе запроса с параметрами
'в виде полей форм
Public Function OpenRQ(NameQuery As String) As Recordset
Dim Q As QueryDef, par As Parameter
Dim S As String, i As Integer, j As Integer

Set Q = CurrentDb.QueryDefs(NameQuery)

For Each par In Q.Parameters
S=par.Name
i = InStr(S, "!")
j = InStr(i + 1, S, "!")
Par = _
Forms(Mid(S, i + 1, j - i - 1))(Mid(S, j + 1))
Next par

Set OpenRQ = Q.OpenRecordset

End Function

Следующая функция немного сложнее, но она делает тоже самое не только с запросами,
записанными в базу (QueryDefs), но и запросами, заданными прямым текстом SQL.
Конечно, SQL-текст может содержать ссылки на другие запросы.

Public Function rpOpenRQ(NameQuery_Or_SQL As String) _
As Recordset
Dim Q As QueryDef, par As Parameter

'В тексте SQL обязательно есть FROM c пробелами
If NameQuery_Or_SQL Like "* FROM *" Then
'текст SQL - создаем временный запрос
Set Q = _
CurrentDb.CreateQueryDef("", NameQuery_Or_SQL)

Else
'имя запроса
Set Q = CurrentDb.QueryDefs(NameQuery_Or_SQL)

End If

For Each par In Q.Parameters
par = rpGetVal(par.Name)
Next

Set rpOpenRQ = Q.OpenRecordset
End Function

Здесь используется функция rpGetVal. Она выдает значение поля формы, заданное текстом: "[Forms]![FormName]![FieldName]". (Квадратные скобки могут отсутствовать.) Кроме того, она выдает числовое значение, заданное в виде "=2", и текст без преобразования.

Эти возможности нужны для восстановления значений полей форм, заданных по умолчанию.

Например, FieldName.DefaultValue="=Forms!A!B" или FieldName.DefaultValue="=5".

Для восстановления начального значения поля достаточно написать:

FieldName=rpGetVal(FieldName.DefaultValue)

 

Прямое присвоение: FieldName=FieldName.DefaultValue обычно не проходит.

Public Function rpGetVal(Expression)
Dim S As String, i As Long, j As Long, d As Double

'Возвращаем Null при пустых значениях Expression.
If IsNull(Expression) Then Exit Function
S = Expression
If S = "" Then Exit Function

'Убираем знак "=" - он может быть в DefaultValue.
If Left(S, 1) = "=" Then S = Mid(S, 2)

'Разбор значения S
On Error GoTo EndFun
'Если ошибка при разборе, то выход = Null
i = InStr(S, "!")
If i > 0 Then
'Это поле формы
j = InStr(i + 1, S, "!")
rpGetVal = _
Forms(Mid(S, i + 1, j - i - 1))(Mid(S, j + 1))
Else
'Может это число?
If IsNumeric(S) Then
'Это число. Дробное?
d = CDbl(S)
i = CLng(S)
If d = i Then
rpGetVal = i 'целое
Else
rpGetVal = d 'дробное
End If
Else
'Это какой-то текст
rpGetVal = S
End If
End If
Exit Function

EndFun:
End Function

Запрос по форме

Данный подход позволяет пользователям предоставить доступ к сложным и весьма эффективным запросам, многочисленные параметры которых запоминаются с помощью полей формы.

Простейшим запросом QBF моет быть форма, на которой представлены все поля заполняемой таблицы. Пользователь просто вводит данные в поля и щелкает на кнопке Поиск или OK Щелчок на кнопке запускает запрос, возвращающий из таблицы записи со значениями, совпадающими с введенными в поля формы..

 

Можно ли ввести что-либо в текстовое поле формы и использовать введен­ное значение в качестве фильтра?

Для этого можно использовать метод, который называется запрос по форме (query-by-form). В строку Условие отбора (Criteria) бланка запроса по образцу вводится выражение, которое относится к текстовому полю формы, после чего к форме добавляется кнопка, щелчок на которой является командой для выполнения запроса. Например, на рис. 1.1 показана форма, используемая для ввода условия отбора, и результирующий набор записей, получаемый после щелчка на кнопке Найти (Search).

 

Рис. 1 1. Пример поиска по условию, введенному в форме

Создание запроса по форме выполняется следующим образом.

  1. Создайте форму с текстовыми полями, на основе которых в запросе будет формироваться желаемое условие отбора. Вам понадобится по одному тексто­вому полю на каждую из ячеек бланка запроса по образцу, для которых предусмотрено условие отбора. Например, если вы хотите, чтобы поля запроса Город (City) и Штат (State) заполнялись в соответствии с информацией, взятой из формы, в форму необходимо добавить два текстовых поля.
  2. На Панели элементов (Toolbox) включите кнопку-переключатель Мастера (Control Wizards), если она еще не включена.
  3. Выберите элемент управления Кнопка (Command button) и добавьте его к форме. Откроется диалоговое окно мастера Создание кнопок (Control Button Wizard). В списке Категории: (Categories) выберите пункт Разное (Miscellaneous). В списке Действие (Actions) выберите пункт Запуск запроса (Run Query) и щелкните на кнопке Далее (Next).
  4. В очередном диалоговом окне выберите запрос, который будет принимать и обрабатывать значения, введенные в форму. Щелкните на кнопке Далее В следующем диалоговом окне включите переключатель Текст (Text) и введите в текстовое поле надпись, которая должна быть изображена на кнопке, например: Найти. Щелкните на кнопке Готово (Finish) - - кнопка
    будет добавлена в форму.
  5. Сохраните форму.
  6. Откройте запрос в режиме конструктора. В каждом текстовом поле строки Условие отбора: (Criteria), соответствующем текстовым полям формы, необходимо ввести выражение, например:

Forms! [имя формы]I[имя элемента управления] OR Forms! [имя формы]! [имя элемента управления] Is Null

Здесь [имя формы] — имя вашей формы, а [имя элемента управления] -имя, присвоенное элементу управления «текстовое поле». Например, если форма называется Поиск клиента, то в строке Условие отбора: (Criteria) поля Город в запросе должна быть следующая запись:

[Forms]![Поиск клиента]![Город] OR [Forms]![Поиск клиента]![Город] Is Null

Сохранив запрос, можно открыть форму, ввести условие отбора в текстовые поля и щелкнуть на кнопке, чтобы выполнить запрос с введенными условиями отбора.

Итоги в формах






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных