|
|
|
| Всем привет!
Помогите пожалуйста засунуть переменную в стандартный запрос Access.
Делаю так:
SELECT [Автомобили Хозяйства].[Марка автомобиля], [Автомобили Хозяйства].[Государственный номер], [Автомобили Хозяйства].[Год выпуска]
FROM [Автомобили Хозяйства] INNER JOIN [Статистика ТОР] ON [Автомобили Хозяйства].Код = [Статистика ТОР].[Код Автомобиля];
WHERE ((([Автомобили Хозяйства].[Марка автомобиля]) = "" & [Module1].[Avto] & ""));
Выводит сообщение - Введите значение параметра Module1.Avto
Код функции модуля1, функция запускается перед открытием запроса.
Option Compare Database
Public Avto As String ' Автомобиль
Public Function Переменные()
Avto = "ВАЗ-2101"
End Function
Что я делаю не так? И как надо?
Заранее спасибо. | |
|
| |
|
|
|
| Можно так:
'в модуле
Private strAvto As String
Public Property Get Avto() As String
Avto = strAvto
End Property
Public Property Let Avto(ByVal NewValue As String)
strAvto = NewValue
End Property
'проверка в отладчике:
Avto = "Ваз"
?Avto()
Ваз
В запросе:
...Where [Автомобили Хозяйства].[Марка автомобиля]=Avto()...
|
При сбросе проекта в результате необработанной ошибки значения переменных слетают в дефолтные.
Можно использовать скрытую форму для хранения в ее полях значений для запросов. | |
|
| |
|
|
|
| Спасибо большое. Все получилось, только я не понял на счет второй процедуры, зачем она?
У меня получилось вот так:
Public Property Get Avto() As String
Avto = "Ваз-2101"
End Property
|
В запросе написал как вы подсказали. | |
|
| |
|
|
|
|
| Выходит если у меня условия отбора по нескольким полям, то для каждого поля нужно так делать?
И если условия отбора нужно брать из полей формы, то как делать? Записывать в таблицу, потом вытаскивать их от туда? или есть способ легче?
Сейчас остановился на том, что все значения по которым идет отбор записываю в отдельную таблицу.
А в условия отбора запроса ввожу подчиненное условие запроса на эту самую отдельную таблицу.
WHERE ((([Районирование территорий РФ по природно-климатическим условиям].[Административно-территориальные единицы])=(SELECT [Поле1] From [Таблица1])));
|
Может есть еще проще способ? | |
|
| |
|
16 Кб. |
|
| Можно:
1. подставлять в условия запроса значения полей формы (с/без предварительного сохранения в таблицу) =>
2. Собирать SQL строку запроса кодом. | |
|
| |
|
|
|
| Ух ты, спасибо, так намного проще, без сохранения в таблицу.
А как можно собирать SQL строку запроса кодом? Если не трудно расскажите, вдруг пригодится. | |
|
| |
|
|
|
| Простенький пример:
Public Function GetSQL(strAvto As String) As String
GetSQL = "SELECT * FROM tblItems WHERE Avto='" & strAvto & "'"
End Function
|
Функция возвращает SQL строку для выборки записей, в которых значение текстового поля Avto таблицы tblItems равно значению переданного ей аргумента (strAvto).
Если функция в модуле формы, то можно вместо аргументов использовать ссылки на поля формы:
Private Function GetSQL() As String
GetSQL = "SELECT * FROM tblItems WHERE Avto='" & Me.Avto & "'"
End Function
|
Возвращаемую функцией строку SQL можно использовать как источник записей формы, источник строк списка и комбобокса и для прочих потребностей. | |
|
| |
|
|
|
| Большое спасибо за помощь и разъяснения. | |
|
| |
|
|
|
| Извиняюсь за настойчивость. Возникла проблема.
Как обновлять запрос? Т.е. у меня на форме два поля со списком - значения которых участвуют в запросе Access. И есть подчиненная форма - которая отображает записи запроса.
Как сделать так, что бы записи автоматически обновлялись, при выборе другого значения из полей со списком?
А то у меня выбирай - не выбирай, записи одни и те же стоят. - выбранные по значению полей со списки, которые по умолчания установлены. | |
|
| |
|
|
|
| на событие после обновления поля со списком
me![имя подчиненной формы].form.recordsource=me![имя подчиненной формы].form.recordsource
или
forms![имя основной формы]![имя подчиненной формы].form.recordsource=forms![имя основной формы]![имя подчиненной формы].form.recordsource | |
|
| |
|
|
|
| Спасибо. Заработало! А то пробовал через макросы - косяки вылазили. | |
|
| |