![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FIB [D7, FireBird]
mv © (2008-06-17 17:08:00)Добрый день!
Помогите реализовать задачу: Сделать в приложении возможность при выборе значений oto_task_distrib_main.type_task in (300,400,500,600,700) отсеивать записи в TcxLookupComboBox по статусу APIO.status in (3,5,8), а при выборе oto_task_distrib_main.type_task = 800 - APIO.status in (3,5,8,11,12 и т.д.).
Я так понимаю, что нужно делать два разных запроса.
Типа if FIBDataSet.FieldByName('TYPE_TASK').Value = '800' then исполняем один запрос, при остальных значениях - второй.
В общем, как сделать мне понятно, но не пойму как переделать запрос, чтобы можно было выбрать TYPE_TASK из набора.
SELECT ID, AGENTPOINT_NAME, AGENT_LIMIT, CUSTID, STATUS_NAME
FROM AGENTPOINT_PLACE_IN_OTOEX(:BANK_PARTNER_ID_IN) APIO
WHERE NOT exists (SELECT * FROM oto_task_distrib
INNER join oto_task_distrib_main
ON oto_task_distrib.task_id = oto_task_distrib_main.id and oto_task_distrib_main.type_task in (300,400,500,600,700,800)
WHERE oto_task_distrib.agentpoint_place_id = APIO.ID AND oto_task_distrib.status in (0,50))
and APIO.status in (3,5,8)
dsAgentPointName.Close;
if bActive then
begin
dsAgentPointName.ParamByName('BANK_PARTNER_ID_IN').AsInteger := dsGetBankPartnerID.Fields.FieldByName('BANKPARTNER_ID').AsInteger;
dsAgentPointName.SQLs.SelectSQL.Text;
dsAgentPointName.Prepare;
dsAgentPointName.Active := bActive;
end;
mv (2008-06-18 13:49:00) [1]Не работает фильтр. помогите составить правильно, плиз.
mv (2008-06-18 12:59:00) [2]вы все правильно поняли, именно это и хочется поиметь:
where
(заявка in (300,400,500,600,700) and статус in (3,5,8))
or
(заявка = 800 and статус in (3,5,8,12)).
Но руки кривоваты, чтобы правильно в запрос впихнуть, да еще, чтобы это все работало.
Поросенок Винни-Пух (2008-06-18 12:43:00) [3]так не выйдет статус за скобками фильтра
Нужно, чтобы для заявок 300,400,500,600,700 попадали пункты со статусом 3,5,8 , а для заявок 800 - 3,5,8,12 и т.д.
я ж сказал, что по человечески надо выразить что же именно хочется поиметь.
mv (2008-06-18 12:42:00) [4]
> либо исходный запрос и селект из него если fb2.x
это и есть исходный запрос
mv (2008-06-18 12:40:00) [5]а вообще конечно стоит попробывать
mv (2008-06-18 12:39:00) [6]
> where
> (заявка in (300,400,500,600,700) and статус in (3,5,8))
> or
> (заявка = 800 and статус in (3,5,8,12))
>
так не выйдет статус за скобками фильтра
Поросенок Винни-Пух (2008-06-18 12:37:00) [7]либо исходный запрос и селект из него если fb2.x
Поросенок Винни-Пух (2008-06-18 12:35:00) [8]Нужно, чтобы для заявок 300,400,500,600,700 попадали пункты со статусом 3,5,8 , а для заявок 800 - 3,5,8,12 и т.д.
where
(заявка in (300,400,500,600,700) and статус in (3,5,8))
or
(заявка = 800 and статус in (3,5,8,12))
Sergey13 (2008-06-18 12:29:00) [9]> [4] mv (18.06.08 12:21)
Фильтровать датасет?
mv (2008-06-18 12:21:00) [10]Из датасет в комбобокс для заявок с типом 300,400,500,600,700,800 попадают пункты со статусом 3,5,8.
WHERE NOT exists (SELECT * FROM oto_task_distrib
INNER join oto_task_distrib_main
ON oto_task_distrib.task_id = oto_task_distrib_main.id and oto_task_distrib_main.type_task in (300,400,500,600,700,800)
WHERE oto_task_distrib.agentpoint_place_id = APIO.ID AND oto_task_distrib.status in (0,50))
and APIO.status in (3,5,8)
Нужно, чтобы для заявок 300,400,500,600,700 попадали пункты со статусом 3,5,8 , а для заявок 800 - 3,5,8,12 и т.д.
Поросенок Винни-Пух (2008-06-18 10:58:00) [11]можно, если на человеческом языке сможешь сформулировать что же тебе надо
mv (2008-06-18 10:35:00) [12]это можно решить одним запросом? Сомневаюсь
Поросенок Винни-Пух (2008-06-17 18:29:00) [13]где
(тайп_таск ин (....) and статус такой-то)
или
(тайп_таск ин (....) and статус такой-то)