Unidac 3.0.0.2 и Fastreport 4.8.11

отредактировано 00:43 Раздел: FastReport 4.0
Здрасте! Может кто подскажет. Проблема следующая, использую обертку над TUniDacQuery (идет в комплекте UniDAC, в демках). В репорте бросаю в DataPage два TfrxUniDACQuery, один мастер второй детайл. Оба кверика имеют параметры на входе, так вот если в детайл не заполнять Master и MasterFileds, то датасет возвращает нормально, а если проставить связку, то в квери детайл скрипт (смотрел в sql profiler) модифицированный какой-то, добавились кавычки в одном месте и еще один параметр. Вопрос, где формируется конечный скрипт на выполнение? В каком месте рыть?
Кусок кода из TfrxUniDACQuery:
WHERE
PU.IsActive = 1
AND PUBP.Period=@PlannedPeriod
END

insert into #DetailBill
(AccountId, PeriodFrom, PeriodTo, Summ,
Quantity, StartScore, EndScore, [Type])

SELECT TDB.AccountId ,
CASE [Type]
WHEN 3 THEN MIN(ISNULL(TDB.CalculatePeriod, CAST(@CurrentMonths*100+1 AS VARCHAR(10))))
ELSE MIN(TDB.[ConsumptionFrom])
END PeriodFrom ,
CASE [Type]
WHEN 3 THEN MAX(ISNULL(TDB.CalculatePeriod, CAST(@CurrentMonths*100+1 AS VARCHAR(10))))
ELSE MAX(TDB.ConsumptionTo)
END PeriodTo ,
CASE WHEN TDB.[Type] = 1
THEN SUM(TDB.[TotalSumm]) - SUM(TDB.[UsedSummByPaid])
- SUM(TDB.[UsedSummByWriteoff])
- SUM(TDB.[UsedSummBySubsidy])
ELSE SUM(TDB.[TotalSumm])
END [Summ] ,
SUM(TDB.[ConsumptionQuantity]) Quantity ,
CASE WHEN TDB.[Type] = 0
THEN STUFF(( SELECT TOP 1 '/'
+ CAST(REPLACE([I].[Value], '.00000', '') AS VARCHAR)
FROM [Measuring].[Index] I
JOIN [Measuring].[GroupIndex] AS gi2 ON [I].[GroupIndexId] = [gi2].[GroupIndexId]
JOIN [Measuring].[Counter] AS c ON [gi2].[CounterId] = [c].[CounterId]
WHERE [c].[PointId] = [TDB].[PointId]
AND [GI2].[Date] = MIN(TDB.ConsumptionFrom)
FOR
XML PATH('')
), 1, 1, '')
ELSE NULL
END AS StartScore ,
CASE WHEN TDB.[Type] IN ( 0, 1 )
THEN STUFF(( SELECT '/'
+ CAST(REPLACE(MAX(([I].[Value])), '.00000', '') AS VARCHAR)
FROM [Measuring].[Index] I
JOIN [Measuring].[GroupIndex] AS gi2 ON [I].[GroupIndexId] = [gi2].[GroupIndexId]
JOIN [Measuring].[Counter] AS c ON [gi2].[CounterId] = [c].[CounterId]
WHERE [c].[PointId] = [TDB].[PointId]
AND [GI2].[Date] = MAX(TDB.ConsumptionTo)
GROUP BY [GI2].[Date], [I].[Value]
FOR
XML PATH('')
), 1, 1, '')
ELSE NULL
END AS EndScore,
TDB.[Type]
FROM #TempDetailBill AS TDB

Код из sql profiler:
WHERE (
PU.IsActive = 1
AND PUBP.Period=@PlannedPeriod
END

insert into #DetailBill
(AccountId, PeriodFrom, PeriodTo, Summ,
Quantity, StartScore, EndScore, [Type])

SELECT TDB.AccountId ,
CASE [Type]
WHEN 3 THEN MIN(ISNULL(TDB.CalculatePeriod, CAST(@CurrentMonths*100+1 AS VARCHAR(10))))
ELSE MIN(TDB.[ConsumptionFrom])
END PeriodFrom ,
CASE [Type]
WHEN 3 THEN MAX(ISNULL(TDB.CalculatePeriod, CAST(@CurrentMonths*100+1 AS VARCHAR(10))))
ELSE MAX(TDB.ConsumptionTo)
END PeriodTo ,
CASE WHEN TDB.[Type] = 1
THEN SUM(TDB.[TotalSumm]) - SUM(TDB.[UsedSummByPaid])
- SUM(TDB.[UsedSummByWriteoff])
- SUM(TDB.[UsedSummBySubsidy])
ELSE SUM(TDB.[TotalSumm])
END [Summ] ,
SUM(TDB.[ConsumptionQuantity]) Quantity ,
CASE WHEN TDB.[Type] = 0
THEN STUFF(( SELECT TOP 1 ''/''
+ CAST(REPLACE([I].[Value], ''.00000'', '''') AS VARCHAR)
FROM [Measuring].[Index] I
JOIN [Measuring].[GroupIndex] AS gi2 ON [I].[GroupIndexId] = [gi2].[GroupIndexId]
JOIN [Measuring].[Counter] AS c ON [gi2].[CounterId] = [c].[CounterId]
WHERE [c].[PointId] = [TDB].[PointId]
AND [GI2].[Date] = MIN(TDB.ConsumptionFrom)
FOR
XML PATH('''')
), 1, 1, '''')
ELSE NULL
END AS StartScore ,
CASE WHEN TDB.[Type] IN ( 0, 1 )
THEN STUFF(( SELECT ''/''
+ CAST(REPLACE(MAX(([I].[Value])), ''.00000'', '''') AS VARCHAR)
FROM [Measuring].[Index] I
JOIN [Measuring].[GroupIndex] AS gi2 ON [I].[GroupIndexId] = [gi2].[GroupIndexId]
JOIN [Measuring].[Counter] AS c ON [gi2].[CounterId] = [c].[CounterId]
WHERE [c].[PointId] = [TDB].[PointId]
AND [GI2].[Date] = MAX(TDB.ConsumptionTo)
GROUP BY [GI2].[Date], [I].[Value]
FOR
XML PATH('''')
), 1, 1, '''')
ELSE NULL
END AS EndScore,
TDB.[Type]
FROM #TempDetailBill AS TDB) AND AccountId = @P4

Как видно из скрипта sql profiler, откуда-то добавилась кавычка
WHERE (
PU.IsActive = 1
и вторая кавычка с переменной
FROM #TempDetailBill AS TDB) AND AccountId = @P4

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.