Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| Условие отбора в запросе - переменная
Как в переменную вписать условие "Огурец" Or "Огурец-зеленец" | |
|
| |
|
|
|
| like "*" & "Огурец" & "*" | |
|
| |
|
|
|
| Это не катит потому как есть ещё "Огурец-молодец"
его бы не надо выводить в отбираемые данные........ | |
|
| |
|
|
|
| (like "*" & "Огурец" & "*") And Not In("Огурец-молодец", "Огурец-придурок","Огурец-пипец") | |
|
| |
|
|
|
| Как написать условие отбора я допустим понял - как эт условие передать в условие запроса через переменную (Я_Переменная)
Условие отбора в запросе - переменная
Как в переменную вписать условие "Огурец" Or "Огурец-зеленец"
|
Я_Переменная =(like "*" & "Огурец" & "*") And Not In("Огурец-молодец", "Огурец-придурок","Огурец-пипец") | |
|
| |
|
|
|
| А почему Like, если известны полные значения?
Быстрее, чем strFilter="[Овосчь] IN ('Огурец','Огурец-зеленец')"?
Передать можно через поле формы, публичные: функцию, проперти, переменную формы, возможно отчета (не пробовал) или через публичную функцию глобального модуля. | |
|
| |
|
|
|
| а еще иногда проще пареной репы строить такие фильтры для запросов "на лету" | |
|
| |
|
|
|
| Вам смешно
А умну: Фильтр очень большой...
SELECT Sale_Rights_broadcasting.ID_Film, Sale_Film_Nams.Film_Name, Sale_Rights_broadcasting.Date_First, Sale_Rights_broadcasting.Date_Last, Sale_Rights_broadcasting.Agreement, Sale_Rights_broadcasting.Region_Name, Sale_Rights_broadcasting.Type_Payment, Sale_Rights_broadcasting.Labels, Sale_Rights_broadcasting.Zametki, Sale_Rights_broadcasting.Plan_Real, Sale_Rights_broadcasting.Rights_Name, Sale_Rights_broadcasting.Channel_Name, Sale_Rights_broadcasting.Type_broadcasting, InStr(1,FUN_List_territory_QUERY(),[Sale_Rights_broadcasting]![Region_Name],3) AS List_territory
FROM Sale_Film_Nams RIGHT JOIN Sale_Rights_broadcasting ON Sale_Film_Nams.Id_Film_Name = Sale_Rights_broadcasting.ID_Film
WHERE (((Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_1() Or (Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_2()) AND ((Sale_Rights_broadcasting.Channel_Name)<>[Forms]![FRM_Free_Film]![Channel_Name]) AND ((Sale_Rights_broadcasting.Type_broadcasting)=FUN_Type_broadcasting_Air()) AND ((InStr(1,FUN_List_territory_QUERY(),[Sale_Rights_broadcasting]![Region_Name],3))=0) AND ((funOrderValidete_QUERY([Date_First],[Date_last]))=True) AND ((InStr(1,FUN_NO_Plan_QUERY(),[Sale_Rights_broadcasting]![Plan_Real],3))<>0) AND ((InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))=0 And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0" And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0") AND ((InStr(1,FUN_Type_Payment_Air(),[Sale_Rights_broadcasting]![Type_Payment],3))=0)) OR (((Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_1() Or (Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_2()) AND ((Sale_Rights_broadcasting.Channel_Name)<>[Forms]![FRM_Free_Film]![Channel_Name]) AND ((Sale_Rights_broadcasting.Type_broadcasting)=FUN_Type_broadcasting_Air()) AND ((funOrderValidete_QUERY([Date_First],[Date_last]))=True) AND ((InStr(1,FUN_NO_Plan_QUERY(),[Sale_Rights_broadcasting]![Plan_Real],3))<>0) AND ((InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))=0 And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0" And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0") AND ((InStr(1,FUN_Type_Payment_Air(),[Sale_Rights_broadcasting]![Type_Payment],3))=0) AND ((nz([Sale_Rights_broadcasting]![Region_Name]))="")) OR (((Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_1() Or (Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_2()) AND ((Sale_Rights_broadcasting.Channel_Name)<>[Forms]![FRM_Free_Film]![Channel_Name]) AND ((Sale_Rights_broadcasting.Type_broadcasting)=FUN_Type_broadcasting_Sputnik()) AND ((InStr(1,FUN_List_territory_QUERY(),[Sale_Rights_broadcasting]![Region_Name],3))=0) AND ((funOrderValidete_QUERY([Date_First],[Date_last]))=True) AND ((InStr(1,FUN_NO_Plan_QUERY(),[Sale_Rights_broadcasting]![Plan_Real],3))<>0) AND ((InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))=0 And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0" And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0") AND ((InStr(1,FUN_Type_Payment_Sputnik(),[Sale_Rights_broadcasting]![Type_Payment],3))=0)) OR (((Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_1() Or (Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_2()) AND ((Sale_Rights_broadcasting.Channel_Name)<>[Forms]![FRM_Free_Film]![Channel_Name]) AND ((Sale_Rights_broadcasting.Type_broadcasting)=FUN_Type_broadcasting_Sputnik()) AND ((funOrderValidete_QUERY([Date_First],[Date_last]))=True) AND ((InStr(1,FUN_NO_Plan_QUERY(),[Sale_Rights_broadcasting]![Plan_Real],3))<>0) AND ((InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))=0 And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0" And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0") AND ((nz([Sale_Rights_broadcasting]![Region_Name]))="") AND ((InStr(1,FUN_Type_Payment_Sputnik(),[Sale_Rights_broadcasting]![Type_Payment],3))=0)) OR (((Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_1() Or (Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_2()) AND ((Sale_Rights_broadcasting.Channel_Name)<>[Forms]![FRM_Free_Film]![Channel_Name]) AND ((Sale_Rights_broadcasting.Type_broadcasting)=FUN_Type_broadcasting_Kabel()) AND ((InStr(1,FUN_List_territory_QUERY(),[Sale_Rights_broadcasting]![Region_Name],3))=0) AND ((funOrderValidete_QUERY([Date_First],[Date_last]))=True) AND ((InStr(1,FUN_NO_Plan_QUERY(),[Sale_Rights_broadcasting]![Plan_Real],3))<>0) AND ((InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))=0 And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0" And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0") AND ((InStr(1,FUN_Type_Payment_Kabel(),[Sale_Rights_broadcasting]![Type_Payment],3))=0)) OR (((Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_1() Or (Sale_Rights_broadcasting.Rights_Name) Like FUN_Rights_QUERY_2()) AND ((Sale_Rights_broadcasting.Channel_Name)<>[Forms]![FRM_Free_Film]![Channel_Name]) AND ((Sale_Rights_broadcasting.Type_broadcasting)=FUN_Type_broadcasting_Kabel()) AND ((funOrderValidete_QUERY([Date_First],[Date_last]))=True) AND ((InStr(1,FUN_NO_Plan_QUERY(),[Sale_Rights_broadcasting]![Plan_Real],3))<>0) AND ((InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))=0 And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0" And (InStr(1,[Sale_Rights_broadcasting]![Labels],FUN_Channel_Name_QUERY(),3))="0") AND ((nz([Sale_Rights_broadcasting]![Region_Name]))="") AND ((InStr(1,FUN_Type_Payment_Kabel(),[Sale_Rights_broadcasting]![Type_Payment],3))=0))
WITH OWNERACCESS OPTION;
|
Что бы не запутаться - делаю всё в конструкторе запросов - там нагляднее.
Вот потому и вопрос задаю - засунуть условие в переменную и подставить переменную в условие.
Можно не переменную можно функцию
но "Огурец" or "Огурец-зеленец" | |
|
| |
|
|
|
| Да уж.
"Да здравствует мыло душистое, и веревка пушистая." | |
|
| |
|
|
|
| Вот билет на балет
на вопрос совета нет!!
переменная = "Огурец" Or "Огурец-зеленец" | |
|
| |
|
|
|
| А чем вызвано желание использовать одну переменную. Что две пременных никак не прокатит?. Засунуть их в функцию а в функции прописать Огурец or Огурец-молодец? | |
|
| |
|
|
|
|
|
| Надеюсь в саму переменную засунуть or проблем не составит.
a = "помидор"
b="офигеть какой вкусный"
с= b &" or "& a
Как вытянуть из переменной or? В таком случае только анализом переменной - считывать переменную до первого встречающегося or Засунуть считываемое в одну переменную Затем пропускаем or и считываем до конца строки - и это засовываем в другую переменную. После этого в запрос вставляется две переменных с разделителем or.
Именно это я и имел в виду, когда говорил о двух переменных.
В любом случае без разбиения строки на переменные не обойтись. | |
|
| |
|
|
|
| спасибо - пробую
только видимо - три переменных надо
нет не удача......
получается вот что с= " b Or a"
а надо с= b Or a | |
|
| |
|
|
|
| Час, тебе же Силыч советовал: собирай строку SQL целиком или условия фильтра кодом в одну переменную. Выводи для удобочитаемости как-то так:
SELECT
[NameCustomer],
[NameDocument],
[NumberDocument],
[DateDocument],
[AmountDocument],
[NameCurrency],
[DescriptionPay],
[DatePay],
[WeekPay],
[Payed],
[Liabillity],
[CFO],
[DescriptionOrder]
FROM sqlOrderData
WHERE
([NameCustomer] LIKE
'*Соборн*'
AND
[NameCustomer] LIKE
'*ООО*')
AND
[NameDocument] IN
('Счет')
AND
[NumberDocument] IN
('1929',
'2296',
'2350',
'2828',
'48812241')
AND
([DateDocument]
BETWEEN
#01/01/2000#
AND
#01/01/2010#)
AND
([AmountDocument]>100)
AND
[NameCurrency] IN
('Руб.')
AND
[DescriptionPay] IN
('Жир говяжий',
'Инструменты',
'Интернет 06',
'Интернет 07',
'Оргтехника')
AND
([DatePay]>#01/13/2001#)
AND
[WeekPay] IN
(28, 29, 30, 31, 32, 34)
AND
([Payed]>0)
AND
([Liabillity]<>0)
AND
[CFO] IN
('Администрация',
'Качество')
AND
([DescriptionOrder]
IS NOT NULL)
ORDER BY
[NameCustomer] ASC,
[DateDocument] DESC;
|
| |
|
| |
|
|
|
| Lukas - ну ты же видел запрос длинною с паровоз - я загребусь собирать.
там шесть строк условий
а переменную -я в двух функциях собираю:
но фигня получается - не работает.....
Public Function FUN_Rights_QUERY_1() As Variant 'отбор только Исключительных права
' Исключительный_Список1
If [Forms]![FRM_Free_Film]![Исключительный_Список] = -1 Then
FUN_Rights_QUERY_1 = "Исключительные права"
Else
FUN_Rights_QUERY_1 = "Условно-исключительные"
End If
End Function
Public Function FUN_Rights_QUERY_2() As String 'отбор только Исключительных права
' Исключительный_Список2
If [Forms]![FRM_Free_Film]![Исключительный_Список] = -1 Then
FUN_Rights_QUERY_2 = "Исключительные права"
Else
FUN_Rights_QUERY_2 = "Не исключительные права"
End If
End Function
|
В запросе в кач условия
FUN_Rights_QUERY_1() Or FUN_Rights_QUERY_2()
|
ни XP не срабатывает | |
|
| |
|
|
|
| Когда будешь собирать строку SQL кодом, будешь подставлять вместо функций - их значения. Во первых - работать будет значительно быстрее, во вторых сможешь посмотреть строку в окне отладчика - 90% проблем "вылезут на глаза" сразу.
А длинный текст у тебя потому, что куча ссылок на форму, функции и длинные имена полей+название таблиц.
Замени все ссылки значениями и увидишь, что 6 строк превратяться в 2-3. | |
|
| |
|
|
|
| Красиво - стройно наглядно | |
|
| |
HiProg.com - Технологии программирования
|