Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 05:23   #1
NecroArt
 
Регистрация: 09.08.2010
Сообщений: 8
По умолчанию Использование ВремПеременных в запросах

Здравствуйте. Использую Microsoft Access 2007 для создания базы данных.
У меня это первая БД, так что опыта мало. Поэтому столкнулся со следующей проблемой:
У меня имеется запрос, который отбирает из таблицы записи по какой-либо дате (дата производства или дата продажи). Требование в БД такое, чтобы юзер не мог напортачить при вводе параметров, поэтому, если я пишу в конструкторе запроса в поле "Условие отбора" выражение >=[Начальная] And <=[Конечная дата], то пользователь может ввести в качестве параметра любую букву, что и приведёт в к ошибке. Чтобы этого не произошло, я хочу использовать маску в форме. Теперь вопрос: как правильно это реализовать? В своей форме в поле ,куда вводится дата задаю событие "После обновления" как макрос: ЗадатьВремПеременную, Имя: StartDate, Выражение: [Формы]![Ввод дат]![Поле0].[OnChange] (Для создания выражение использовал построитель выражений). В запросе же пишу: >=[TempVars]![StartDate] And <=[Конечная дата]. Но тогда, при вызове запроса, выдаётся сообщение о невозможности вычислить выражение и т.д.
Помогите пожалуйста ) Сколько не гуглил, никак не могу сообразить, как сделать правильно.
NecroArt вне форума Ответить с цитированием
Старый 13.02.2011, 11:48   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте NecroArt.
1. конструкция "..>=[Начальная] And <=[Конечная дата].." - не есть правильно.
необходимо явно указывать в сравнении имя объекта (поля) : D>=[Начальная] And D<=[Конечная дата]
или использовать оператор сравнения Between:
WHERE D Between [Начальная] And [Конечная дата]
2. не знаю как Вы планируете использовать макрос: ЗадатьВремПеременную, но передать значение переменной в любую SQL конструкцию можно только используя функцию, в MS Access это может быть пользовательская VBA функция возвращающая значение переменной или объекта.
Использоваться может так:
Код:
Function D1ToSql() As Date
    D1ToSql = D1
End Function
Function D2ToSql() As Date
    D2ToSql = D2
End Function
SELECT ... FROM ... WHERE D Between D1ToSql() And D2ToSql()
(D - поле даты в запросе, D1,D2 - значения переменных или соответствующих полей формы)

Успехов Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 15.02.2011, 13:32   #3
NecroArt
 
Регистрация: 09.08.2010
Сообщений: 8
По умолчанию Нашёл другое, простейшее решение

Оказывается, проблема решается добавлением в условие конструктора выражения вида Forms![Форма1].Controls![Поле1].Value. Что ж, всё= спасибо )
NecroArt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NULL в sql-запросах _SERGEYX_ БД в Delphi 5 27.10.2010 18:16
проблемка с соксами при idhttp запросах maloy_ya Работа с сетью в Delphi 3 29.09.2010 18:33
Трабл при SOAP-запросах по таймеру 1datr Работа с сетью в Delphi 0 03.10.2009 13:26
Пустые поля в запросах PetroPorsh Microsoft Office Access 1 16.10.2008 16:56
Возможна ли рекурсия в запросах eremin БД в Delphi 0 23.05.2007 15:54