Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос Access В чем косяк?
 
 автор: Maksimilian   (07.05.2010 в 22:06)   личное сообщение
 
 

Всем привет!
Помогите пожалуйста засунуть переменную в стандартный запрос 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

Что я делаю не так? И как надо?
Заранее спасибо.

  Ответить  
 
 автор: Lukas   (07.05.2010 в 22:45)   личное сообщение
 
 

Можно так:

'в модуле
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()...

При сбросе проекта в результате необработанной ошибки значения переменных слетают в дефолтные.
Можно использовать скрытую форму для хранения в ее полях значений для запросов.

  Ответить  
 
 автор: Maksimilian   (08.05.2010 в 08:44)   личное сообщение
 
 

Спасибо большое. Все получилось, только я не понял на счет второй процедуры, зачем она?
У меня получилось вот так:

Public Property Get Avto() As String
    Avto = "Ваз-2101"
End Property 

В запросе написал как вы подсказали.

  Ответить  
 
 автор: Explorer   (08.05.2010 в 12:43)   личное сообщение
 
 

эх-е-хех... :)

  Ответить  
 
 автор: Maksimilian   (08.05.2010 в 17:35)   личное сообщение
 
 

Выходит если у меня условия отбора по нескольким полям, то для каждого поля нужно так делать?
И если условия отбора нужно брать из полей формы, то как делать? Записывать в таблицу, потом вытаскивать их от туда? или есть способ легче?


Сейчас остановился на том, что все значения по которым идет отбор записываю в отдельную таблицу.
А в условия отбора запроса ввожу подчиненное условие запроса на эту самую отдельную таблицу.
WHERE ((([Районирование территорий РФ по природно-климатическим условиям].[Административно-территориальные единицы])=(SELECT [Поле1] From [Таблица1])));



Может есть еще проще способ?

  Ответить  
 
 автор: Lukas   (08.05.2010 в 22:09)   личное сообщение
16 Кб.
 
 

Можно:
1. подставлять в условия запроса значения полей формы (с/без предварительного сохранения в таблицу) =>
2. Собирать SQL строку запроса кодом.

  Ответить  
 
 автор: Maksimilian   (08.05.2010 в 23:00)   личное сообщение
 
 

Ух ты, спасибо, так намного проще, без сохранения в таблицу.
А как можно собирать SQL строку запроса кодом? Если не трудно расскажите, вдруг пригодится.

  Ответить  
 
 автор: Lukas   (09.05.2010 в 01:13)   личное сообщение
 
 

Простенький пример:

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 можно использовать как источник записей формы, источник строк списка и комбобокса и для прочих потребностей.

  Ответить  
 
 автор: Maksimilian   (09.05.2010 в 08:32)   личное сообщение
 
 

Большое спасибо за помощь и разъяснения.

  Ответить  
 
 автор: Maksimilian   (17.05.2010 в 10:42)   личное сообщение
 
 

Извиняюсь за настойчивость. Возникла проблема.
Как обновлять запрос? Т.е. у меня на форме два поля со списком - значения которых участвуют в запросе Access. И есть подчиненная форма - которая отображает записи запроса.
Как сделать так, что бы записи автоматически обновлялись, при выборе другого значения из полей со списком?

А то у меня выбирай - не выбирай, записи одни и те же стоят. - выбранные по значению полей со списки, которые по умолчания установлены.

  Ответить  
 
 автор: snipe   (17.05.2010 в 10:52)   личное сообщение
 
 

на событие после обновления поля со списком

me![имя подчиненной формы].form.recordsource=me![имя подчиненной формы].form.recordsource

или

forms![имя основной формы]![имя подчиненной формы].form.recordsource=forms![имя основной формы]![имя подчиненной формы].form.recordsource

  Ответить  
 
 автор: Maksimilian   (17.05.2010 в 11:03)   личное сообщение
 
 

Спасибо. Заработало! А то пробовал через макросы - косяки вылазили.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList