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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Вопрос по запросу
 
 автор: час   (15.03.2009 в 08:12)   личное сообщение
 
 

Условие отбора в запросе - переменная
Как в переменную вписать условие "Огурец" Or "Огурец-зеленец"

  Ответить  
 
 автор: Силыч   (15.03.2009 в 09:59)   личное сообщение
 
 

like "*" & "Огурец" & "*"

  Ответить  
 
 автор: час   (15.03.2009 в 10:35)   личное сообщение
 
 

Это не катит потому как есть ещё "Огурец-молодец"
его бы не надо выводить в отбираемые данные........

  Ответить  
 
 автор: alecks_lp   (15.03.2009 в 10:54)   личное сообщение
 
 

(like "*" & "Огурец" & "*") And Not In("Огурец-молодец", "Огурец-придурок","Огурец-пипец")

  Ответить  
 
 автор: час   (15.03.2009 в 12:42)   личное сообщение
 
 

Как написать условие отбора я допустим понял - как эт условие передать в условие запроса через переменную (Я_Переменная)

Условие отбора в запросе - переменная
Как в переменную вписать условие "Огурец" Or "Огурец-зеленец"


Я_Переменная =(like "*" & "Огурец" & "*") And Not In("Огурец-молодец", "Огурец-придурок","Огурец-пипец")

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

А почему Like, если известны полные значения?
Быстрее, чем strFilter="[Овосчь] IN ('Огурец','Огурец-зеленец')"?

Передать можно через поле формы, публичные: функцию, проперти, переменную формы, возможно отчета (не пробовал) или через публичную функцию глобального модуля.

  Ответить  
 
 автор: Силыч   (15.03.2009 в 13:14)   личное сообщение
 
 

а еще иногда проще пареной репы строить такие фильтры для запросов "на лету"

  Ответить  
 
 автор: час   (15.03.2009 в 15:02)   личное сообщение
 
 

Вам смешно

А умну: Фильтр очень большой...


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 "Огурец-зеленец"

  Ответить  
 
 автор: Lukas   (15.03.2009 в 16:08)   личное сообщение
 
 

Да уж.

"Да здравствует мыло душистое, и веревка пушистая."

  Ответить  
 
 автор: час   (15.03.2009 в 21:16)   личное сообщение
 
 

Вот билет на балет
на вопрос совета нет!!
переменная = "Огурец" Or "Огурец-зеленец"

  Ответить  
 
 автор: Мюллер   (16.03.2009 в 10:36)   личное сообщение
 
 

А чем вызвано желание использовать одну переменную. Что две пременных никак не прокатит?. Засунуть их в функцию а в функции прописать Огурец or Огурец-молодец?

  Ответить  
 
 автор: час   (16.03.2009 в 16:40)   личное сообщение
 
 

  Ответить  
 
 автор: час   (16.03.2009 в 16:42)   личное сообщение
 
 

Потому шта эта переменная бывает просто помидор.....................

просто картошка
А порой картошка голландская, а возможно и ещё как - меняется учловие отбора - меняется переменная и когда она просто помидор - это понятное дело
переменная = "Помидор"
но когда или или - как записать строку условие с оператором сравнения в центре???
"Огурец" Or "Огурец-зеленец"

  Ответить  
 
 автор: Мюллер   (16.03.2009 в 18:12)   личное сообщение
 
 

Надеюсь в саму переменную засунуть or проблем не составит.
a = "помидор"
b="офигеть какой вкусный"
с= b &" or "& a

Как вытянуть из переменной or? В таком случае только анализом переменной - считывать переменную до первого встречающегося or Засунуть считываемое в одну переменную Затем пропускаем or и считываем до конца строки - и это засовываем в другую переменную. После этого в запрос вставляется две переменных с разделителем or.
Именно это я и имел в виду, когда говорил о двух переменных.


В любом случае без разбиения строки на переменные не обойтись.

  Ответить  
 
 автор: час   (16.03.2009 в 19:50)   личное сообщение
 
 

спасибо - пробую
только видимо - три переменных надо

нет не удача......
получается вот что с= " b Or a"
а надо с= b Or a

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

Час, тебе же Силыч советовал: собирай строку 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;

  Ответить  
 
 автор: час   (16.03.2009 в 20:10)   личное сообщение
 
 

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 не срабатывает

  Ответить  
 
 автор: Lukas   (16.03.2009 в 20:23)   личное сообщение
 
 

Когда будешь собирать строку SQL кодом, будешь подставлять вместо функций - их значения. Во первых - работать будет значительно быстрее, во вторых сможешь посмотреть строку в окне отладчика - 90% проблем "вылезут на глаза" сразу.

А длинный текст у тебя потому, что куча ссылок на форму, функции и длинные имена полей+название таблиц.
Замени все ссылки значениями и увидишь, что 6 строк превратяться в 2-3.

  Ответить  
 
 автор: час   (16.03.2009 в 21:40)   личное сообщение
 
 

Красиво - стройно наглядно

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