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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Не работает условие отбора
 
 автор: diezvip   (08.11.2011 в 10:06)   личное сообщение
 
 

Подскажите что не так делаю.в условие отбора вставляю значение поля из другого запроса которое имеет примерно такой вид: 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]));

  Ответить  
 
 автор: TupoyProgrammer   (08.11.2011 в 10:12)   личное сообщение
 
 

А поконкретней задачу можете описать? Запрос в VBA должен быть типа String и если в него надо вставить переменные То надо делать так:
"SELECT бла бла бла Var=" & Переменная & ""
. И значения полей для выборки можно брать при помощи DMax DSum и т.д.

  Ответить  
 
 автор: diezvip   (08.11.2011 в 10:31)   личное сообщение
 
 

нужно попытаться все сделать в конструкторе запрсов, ну или в SQL режиме.
в моем запросе значение поля [Q] имеет вид: Like '*8*' OR =6 OR =4 и может изменяться динамически в зависимости от результатов другого запроса

  Ответить  
 
 автор: shanemac51   (08.11.2011 в 10:15)   личное сообщение
 
 


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 '*[864]*' 

  Ответить  
 
 автор: diezvip   (08.11.2011 в 10:33)   личное сообщение
 
 

в том то и дело что я условие отбора формирую в другом запросе.
если я подставлю Like '*8*' OR =6 OR =4 вручную все отработает, а вот если в виде поля со значением, то не работает

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

выдернуть значение можно подзапросом или функцией dlookup или переписать его с нужными значениями или написать свою функцию или или или
ps пример делать неохота (был бы пример в аксе 2003 показал бы)

  Ответить  
 
 автор: diezvip   (08.11.2011 в 12:38)   личное сообщение
31 Кб.
 
 

Вот пример. буду признателен за помощь

  Ответить  
 
 автор: kot_k_k   (08.11.2011 в 13:17)   личное сообщение
 
 

рад помочь - но оня выдает ругань на T_MTR.ID_Shablon

смотрим дальше

  Ответить  
 
 автор: kot_k_k   (08.11.2011 в 13:27)   личное сообщение
 
 

так врядли получится -
что происходит
Акс сравнивает поле равное "Болт 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

где-то так

  Ответить  
 
 автор: kot_k_k   (08.11.2011 в 13:39)   личное сообщение
 
 

судя по всему идет попытка создать запрос основываясь на том что будет вводить /выбирать юзверь в каких-либо полях таблы (больше не где )

поэтому можно обойти так


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

  Ответить  
 
 автор: Анатолий (Киев)   (08.11.2011 в 15:44)   личное сообщение
 
 


Но если же Like '*8*' OR =6 OR =4 вставить как простую строку, то все отрабатывает


Сколько лет занимаюсь Аксом, а такой "работающей конструкции" не видел.
И сейчас не верю, но проверять лень.

А вообще в Аксе использовать в сохраненном запросе поле формы или другой таблицы с простым критерием типа Like '*8*' или списком значений через "," можно. Для этого применяется функция EVal.
Например для вашего случая (в поле только Like '*8*'):

WHERE (Eval([Q] & [Q_T_MTR_gorizont_parse.VALUE])=True)

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