Добрый день!
Не работает фильтр Like:
в коде
ApplyDatasetFilter(LookupDataset, 'LikeName', LikeName, true);
в sq-запросе фильтр и параметр называются LikeName
в профайлере запрос к базе выглядит так:
[tbl_Contact].[ID] AS [ID],
[tbl_Contact].[Name] AS [Name],
[tbl_Account].[Name] AS [AccountName]
FROM
[dbo].[tbl_Contact] AS [tbl_Contact]
INNER JOIN
[dbo].[tbl_AdminUnit] AS [tbl_AdminUnit] ON [tbl_AdminUnit].[UserContactID] = [tbl_Contact].[ID]
LEFT OUTER JOIN
[dbo].[tbl_Account] AS [tbl_Account] ON [tbl_Account].[ID] = [tbl_Contact].[AccountID]
WHERE(EXISTS
(SELECT
[tbl_ContactDirect].[ID] AS [ID]
FROM
[dbo].[tbl_ContactDirect] AS [tbl_ContactDirect]
WHERE([tbl_Contact].[ID] = [tbl_ContactDirect].[ContactID] AND
[tbl_ContactDirect].[DirectID] = @P1 AND
[tbl_ContactDirect].[IsInOpportunity] = @P2)) AND
EXISTS
(SELECT
[tbl_ContactDepartment].[ID] AS [ID]
FROM
[dbo].[tbl_ContactDepartment] AS [tbl_ContactDepartment]
WHERE([tbl_Contact].[ID] = [tbl_ContactDepartment].[ContactID] AND
[tbl_ContactDepartment].[DepartmentID] = @P3)) AND
[tbl_Contact].[Name] LIKE ''%'' + NULL + ''%'')',N'@P1 nvarchar(38),@P2 int,@P3 nvarchar(38)',N'{4BEFFD29-FF07-4C4A-BF6D-FF9139F11D5D}',1,N'{8757E935-B255-406B-B096-00DD8D52B019}'
[tbl_Contact].[Name] LIKE ''%'' + NULL + ''%'') - почему-то не воспринимает параметр.
Нравится
А в sq в вас есть параметр, и в Like фильтре все хорошо? Добавьте скриншот sq c этим фильтром
Судя по запросу в профайлере, туда передается пустое значение. желательно произвести отладку, и проверить состояние параметра на момент открытия датасета.
При фильтрации датасета параметр имеет нужное значение.
А при открытии (этот момент отображается в профайлере) как раз пустое.
Лена, все просто, название параметра должно совпадать с названием фильтра, если посмотрите на функцию ApplyDatasetFilter поймете почему
Если бы были разные имена, то вываливалась бы ошибка.
Я не из того запроса скопировала фильтр.
На всякий случай переименовала, но ошибка та же
var LikeName1 = new String('Группа МС'); ApplyDatasetFilter(LookupDataset, 'LikeName1', LikeName1, true);
exec sp_executesql N'SELECT TOP 40 [tbl_Contact].[ID] AS [ID], [tbl_Contact].[Name] AS [Name], [tbl_Account].[Name] AS [AccountName] FROM [dbo].[tbl_Contact] AS [tbl_Contact] INNER JOIN [dbo].[tbl_AdminUnit] AS [tbl_AdminUnit] ON [tbl_AdminUnit].[UserContactID] = [tbl_Contact].[ID] LEFT OUTER JOIN [dbo].[tbl_Account] AS [tbl_Account] ON [tbl_Account].[ID] = [tbl_Contact].[AccountID] WHERE(EXISTS (SELECT [tbl_ContactDirect].[ID] AS [ID] FROM [dbo].[tbl_ContactDirect] AS [tbl_ContactDirect] WHERE([tbl_Contact].[ID] = [tbl_ContactDirect].[ContactID] AND [tbl_ContactDirect].[DirectID] = @P1 AND [tbl_ContactDirect].[IsInOpportunity] = @P2)) AND EXISTS (SELECT [tbl_ContactDepartment].[ID] AS [ID] FROM [dbo].[tbl_ContactDepartment] AS [tbl_ContactDepartment] WHERE([tbl_Contact].[ID] = [tbl_ContactDepartment].[ContactID] AND [tbl_ContactDepartment].[DepartmentID] = @P3)) AND [tbl_Contact].[Name] LIKE ''%'' + NULL + ''%'')',N'@P1 nvarchar(38),@P2 int,@P3 nvarchar(38)',N'{4BEFFD29-FF07-4C4A-BF6D-FF9139F11D5D}',1,N'{8757E935-B255-406B-B096-00DD8D52B019}'
То же самое.
И если написать ApplyDatasetFilter(LookupDataset, 'LikeName1', 'Группа МС%', true);
та же ошибка
Последняя догадка, перед тем как нужно отлаживаться: Попробуйте назвать параметр и фильтр Name - как поле таблицы.
Если не поможет, ставьте debugger (Ctrl+F5) заходите в функцию ApplyDatasetFilter, и смотрите что там происходит.
Про инструменты для отладки можете почитать тут
Спасибо за совет, но именно в ходе отладки я выяснила, что параметр передается и всё ок в функции ApplyDatasetFilter.
Мне не очень нравится ваш подзапрос
(SELECT [tbl_ContactDepartment].[ID] AS [ID] FROM [dbo].[tbl_ContactDepartment] AS [tbl_ContactDepartment] WHERE([tbl_Contact].[ID] = [tbl_ContactDepartment].[ContactID] AND [tbl_ContactDepartment].[DepartmentID] = @P3)) AND [tbl_Contact].[Name] LIKE ''%'' + NULL + ''%'')
Попробуйте тут написать в духе
SELECT * from [dbo].[tbl_ContactDepartment], [tbl_Contact] as [tbl_Contact1]
where [tbl_Contact1].ID and [tbl_ContactDepartment].[ContactID] and ... and [tbl_Contact1].[Name] like ...
Я к тому что у него слишком большая степень вложенности, возможно из-за этого баг