|
|
|
| Подскажите что не так делаю.в условие отбора вставляю значение поля из другого запроса которое имеет примерно такой вид: Like '*8*' OR =6 OR =4
т.е. в одном запросе я формирую условия отбора, а в другом пытаюсь их подставить, но результат пустой запрос. Но если же Like '*8*' OR =6 OR =4 вставить как простую строку, то все отрабатывает
в чем проблема? помогите разобраться, пожалуйста. Вот сам запрос. поле Q как раз и является условием на отбор
SELECT Q_T_MTR_gorizont_parse.ID_MTR, Q_T_MTR_gorizont_parse.ID_SHABLON, Q_T_MTR_gorizont_parse.VALUE, Q_T_MTR_gorizont_parse.pole
FROM Q_T_MTR_gorizont_parse RIGHT JOIN Q_SEARCH_param ON Q_T_MTR_gorizont_parse.pole = Q_SEARCH_param.POLE_ISTOCHNIK
WHERE (((Q_T_MTR_gorizont_parse.VALUE)=[Q]));
|
| |
|
| |
|
|
|
| А поконкретней задачу можете описать? Запрос в VBA должен быть типа String и если в него надо вставить переменные То надо делать так:
"SELECT бла бла бла Var=" & Переменная & ""
. И значения полей для выборки можно брать при помощи DMax DSum и т.д. | |
|
| |
|
|
|
| нужно попытаться все сделать в конструкторе запрсов, ну или в SQL режиме.
в моем запросе значение поля [Q] имеет вид: Like '*8*' OR =6 OR =4 и может изменяться динамически в зависимости от результатов другого запроса | |
|
| |
|
|
|
|
SELECT
Q_T_MTR_gorizont_parse.ID_MTR,
Q_T_MTR_gorizont_parse.ID_SHABLON,
Q_T_MTR_gorizont_parse.VALUE,
Q_T_MTR_gorizont_parse.pole
FROM Q_T_MTR_gorizont_parse
RIGHT JOIN Q_SEARCH_param
ON Q_T_MTR_gorizont_parse.pole = Q_SEARCH_param.POLE_ISTOCHNIK
WHERE (((Q_T_MTR_gorizont_parse.VALUE)=[Q]));
|
а может | |
|
| |
|
|
|
| в том то и дело что я условие отбора формирую в другом запросе.
если я подставлю Like '*8*' OR =6 OR =4 вручную все отработает, а вот если в виде поля со значением, то не работает | |
|
| |
|
|
|
| выдернуть значение можно подзапросом или функцией dlookup или переписать его с нужными значениями или написать свою функцию или или или
ps пример делать неохота (был бы пример в аксе 2003 показал бы) | |
|
| |
|
31 Кб. |
|
| Вот пример. буду признателен за помощь | |
|
| |
|
|
|
| рад помочь - но оня выдает ругань на T_MTR.ID_Shablon
смотрим дальше | |
|
| |
|
|
|
| так врядли получится -
что происходит
Акс сравнивает поле равное "Болт 8 х12 " с полем равным "Like '*8*' OR =6 OR =4"
конечно запрос пустой
нужно создавать условие Where
типа
str_="Where "
str_=str_ & " поле1 Like('*8*') "
проверка дальше
str_ = str_ & " or поле1=4 "
проверка дальше
str_ = str_ & " or поле1=6 "
тогда получим нужное
Where поле1 Like('*8*') or поле1=4 or поле1=6
где-то так | |
|
| |
|
|
|
| судя по всему идет попытка создать запрос основываясь на том что будет вводить /выбирать юзверь в каких-либо полях таблы (больше не где )
поэтому можно обойти так
str_SQL="select * from .......... where "
str_=""
if Forms!выбор_параметров!поле1 is not null then
str_=str_ & " поле_таблы1=" & Forms!выбор_параметров!поле1
end if
if Forms!выбор_параметров!поле2 is not null then
if str_="" then
str_="поле_таблы2=" & Forms!выбор_параметров!поле2
else
str_=str_ & " AND поле_таблы2=" & Forms!выбор_параметров!поле2
end if
end if
str_SQL=str_SQL & str_
и дальше в запрос на основании которого будет строится форма/отчет для визуализации
Forms!вывод_данных.RecordSource = str_SQL
|
| |
|
| |
|
|
|
|
Но если же Like '*8*' OR =6 OR =4 вставить как простую строку, то все отрабатывает
|
Сколько лет занимаюсь Аксом, а такой "работающей конструкции" не видел.
И сейчас не верю, но проверять лень.
А вообще в Аксе использовать в сохраненном запросе поле формы или другой таблицы с простым критерием типа Like '*8*' или списком значений через "," можно. Для этого применяется функция EVal.
Например для вашего случая (в поле только Like '*8*'):
WHERE (Eval([Q] & [Q_T_MTR_gorizont_parse.VALUE])=True) | |
|
| |