Конференция "Базы" » FIB [D7, FireBird]
 
  • mv (17.06.08 17:08) [0]
    Добрый день!
    Помогите реализовать задачу: Сделать в приложении возможность при выборе значений  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;


  • Поросенок Винни-Пух © (17.06.08 18:29) [1]
    где
    (тайп_таск ин (....) and статус такой-то)
    или
    (тайп_таск ин (....) and статус такой-то)
  • mv (18.06.08 10:35) [2]
    это можно решить одним запросом? Сомневаюсь
  • Поросенок Винни-Пух © (18.06.08 10:58) [3]
    можно, если на человеческом языке сможешь сформулировать что же тебе надо
  • mv (18.06.08 12:21) [4]
    Из датасет в комбобокс для заявок с типом 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 и т.д.
  • Sergey13 © (18.06.08 12:29) [5]
    > [4] mv   (18.06.08 12:21)

    Фильтровать датасет?
  • Поросенок Винни-Пух © (18.06.08 12:35) [6]
    Нужно, чтобы для заявок  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))
  • Поросенок Винни-Пух © (18.06.08 12:37) [7]
    либо исходный запрос и селект из него если fb2.x
  • mv (18.06.08 12:39) [8]

    > where
    > (заявка in (300,400,500,600,700) and статус in (3,5,8))
    > or
    > (заявка = 800 and статус in (3,5,8,12))
    >


    так не выйдет статус за скобками фильтра
  • mv (18.06.08 12:40) [9]
    а вообще конечно стоит попробывать
  • mv (18.06.08 12:42) [10]

    > либо исходный запрос и селект из него если fb2.x


    это и есть исходный запрос
  • Поросенок Винни-Пух © (18.06.08 12:43) [11]
    так не выйдет статус за скобками фильтра

    Нужно, чтобы для заявок  300,400,500,600,700 попадали пункты со статусом 3,5,8 , а для заявок 800 - 3,5,8,12 и т.д.

    я ж сказал, что по человечески надо выразить что же именно хочется поиметь.
  • mv (18.06.08 12:59) [12]
    вы все правильно поняли, именно это и хочется поиметь:
    where
    (заявка in (300,400,500,600,700) and статус in (3,5,8))
    or
    (заявка = 800 and статус in (3,5,8,12)).

    Но руки кривоваты, чтобы правильно в запрос впихнуть, да еще, чтобы это все работало.
  • mv (18.06.08 13:49) [13]
    Не работает фильтр. помогите составить правильно, плиз.
Есть новые Нет новых   [134434   +28][b:0][p:0.001]