Фильтр со значениями параметров по-умолчанию

Здравствуйте!

Terrasoft X15 3.2.1.14

Создала вот такой запрос с групповым фильтром:

SELECT
        [tbl_Screen].[ID] AS [ID],
        [tbl_Screen].[CreatedOn] AS [CreatedOn],
        [tbl_Screen].[CreatedByID] AS [CreatedByID],
        [CreatedBy].[Name] AS [CreatedByName],
        [tbl_Screen].[ModifiedOn] AS [ModifiedOn],
        [tbl_Screen].[ModifiedByID] AS [ModifiedByID],
        [ModifiedBy].[Name] AS [ModifiedByName],
        [tbl_Screen].[Name] AS [Name],
        [tbl_Screen].[ScreenStatusID] AS [ScreenStatusID],
        [ScreenStatus].[STATUS] AS [ScreenStatusName],
        [tbl_Screen].[ScreenOnOffID] AS [ScreenOnOffID],
        [ScreenOnOff].[ScreenOnOff] AS [ScreenOnOffName],
        [tbl_Screen].[RoutionDiscID] AS [RoutionDiscID],
        [RoutineDisconnection].[Name] AS [RoutionDiscName],
        [tbl_Screen].[ScreenPath] AS [ScreenPath],
        [tbl_Screen].[StartRoutineDisconnection] AS [StartRoutineDisconnection],
        [tbl_Screen].[EndRoutineDisconnection] AS [EndRoutineDisconnection],
        CAST(CONVERT(VARCHAR(8), [tbl_Screen].[DeletedOnDate], 112) AS DATETIME) AS [DeletedOnDate],
        [tbl_Screen].[TurnOnDate] AS [TurnOnDate]
FROM
        [dbo].[tbl_Screen] AS [tbl_Screen]
LEFT OUTER JOIN
        [dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Screen].[CreatedByID]
LEFT OUTER JOIN
        [dbo].[tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Screen].[ModifiedByID]
LEFT OUTER JOIN
        [dbo].[tbl_Resolution] AS [Resolution] ON [Resolution].[ID] = [tbl_Screen].[ResolutionID]
LEFT OUTER JOIN
        [dbo].[tbl_ScreenType] AS [Type] ON [Type].[ID] = [tbl_Screen].[TypeID]
LEFT OUTER JOIN
        [dbo].[tbl_ScreenStatus] AS [ScreenStatus] ON [ScreenStatus].[ID] = [tbl_Screen].[ScreenStatusID]
LEFT OUTER JOIN
        [dbo].[tbl_ScreenOnOff] AS [ScreenOnOff] ON [ScreenOnOff].[ID] = [tbl_Screen].[ScreenOnOffID]
LEFT OUTER JOIN
        [dbo].[tbl_RoutineDisconnection] AS [RoutineDisconnection] ON [RoutineDisconnection].[ID] = [tbl_Screen].[RoutionDiscID]
WHERE((([tbl_Screen].[ScreenStatusID] = :StatusIDIsntWorking AND
        NOT [tbl_Screen].[TurnOnDate] = :TimeIsNull) OR
        [tbl_Screen].[ScreenStatusID] = :StatusIDWorking OR
        ([tbl_Screen].[ScreenStatusID] = :StatusIDDeleting AND
        NOT [tbl_Screen].[DeletedOnDate] = :TimeIsNull) OR
        [tbl_Screen].[ScreenStatusID] = :StatusIDNoConnection))
ORDER BY
        8 ASC

Для всех параметров заданы значения и нет необходимости передавать их из кода.
1)Как можно включить этот фильтр в коде без передачи значений параметров?

2) NOT [tbl_Screen].[TurnOnDate] = :TimeIsNull
Здесь поле время не должно быть пустым - это условие запроса, какое значение должно быть задано параметру? Его просто оставить пустым?

Спасибо!

Нравится

6 комментариев

Обычно используются функции (скрипта scr_DB) ApplyDatasetFilter(...) - ApplySelectQueryFilter(...) - EnableSelectQueryFilters(...) - EnableFilters(...).
Посмотрите, какую из них Вам удобнее всего будет использовать.

я знаю, что используют эти функции. Дело в том, что функции Apply требуют ParameterValue, если указывать null, то выскакиевает ошибка. А функции Enable просто включают фильтр, но запросы в базу не отправляют.
Если у меня в сервисе sq уже указаны значения для параметров, как мне их использовать? Как вызывать функцию ApplyDatasetFilter не указывая значения параметра? Как включить группу фильтров (у каждого фильтра свой параметр с уже заданным значением)?

Все правильно:
Включите фильтры с помощью EnableSelectQueryFilters(...) или EnableFilters(...) Значение параметров там не требуется.

Запросы в базу пойдут при обновлении набора данных Dataset.Open() или SelectQuery.Execute().
Если Вы установили фильтры (любым способом), это не значит что запрос автоматически будет выполняться :)

точно, у меня же фильтр включается как раз на событии до открытия датасета.
спасибо!

Я могу и ошибаться, но, по-моему, нужно писать NOT [tbl_Screen].[TurnOnDate] IS NULL, потому что (NULL = NULL) = false

Да, верно. На тот момент я не тот фильтр использовала.

Показать все комментарии