我正在创建一个基于动态SQL查询(存储过程)的MS Access报告,该报告根据当前日期输出字段,这意味着它在运行时提供的字段会根据查询的当前日期而变化跑。
我创建了一个vba脚本,它使用SQL Server用来输出字段的相同计算动态更改Access报告的控制源(这似乎工作正常),但我现在想要创建一些基于的计算总和那些动态控件的值,但我似乎无法在计算中使用控件名称(而不是控件源)。
E.G。
我可以仅使用另一个控件的名称来计算一个控件,而不是该控件的控件源(在查询运行之前我无法知道)吗?
我应该只是解决它并执行更多脚本来动态插入sum字段的控制源吗?
答案 0 :(得分:1)
如果您根据来源打开记录集,您可以在VBA中按索引引用字段,例如:
MyValue = rs.Fields(8).Value + rs.Fields(2).Value / 100
答案 1 :(得分:1)
我想我明白你在问什么,看看问题。
我认为最简单的解决方案 - 看你已经在代码中做过类似的事情 - 就是更改Sum文本字段的ControlSource。我假设您的Summation控件的名称是" Date ofP的总和"
在您的代码中,脚本更改名为" Date1P"拥有" 201606 P"的控制源。
添加代码行
me.[Sum Of Date1P].ControlSource = "=Sum([201606 P])"
答案 2 :(得分:1)
如果需要,您可以尝试使用此SQL - 您应该看到一个名为" TotalsP"的新字段。在我们的报告查询中。 将总计字段的controlsource更改为" TotalsP" field - 和分组sum字段将是" = Sum([TotalsP])"
我想我的所有逗号和引号都排成一行。
declare @sql as varchar(max);
select @sql = 'SELECT Person, Project, [Total P], [Total TS],
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [' + [SortDate] + ' P],'
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [TotalsP]'
+ ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then TimesheetHours end), 0) as [' + [SortDate] + ' TS]'
from qryPTGTimesheetsCombinedAllUnionPrepTotalsTIM for xml path('')), 1, 1, '');
select @sql += ' FROM qryPreviousStaticQueryThatProvidesRecords GROUP BY Person, Project, [Total P], [Total TS];'; PRINT @sql; exec(@sql);
答案 3 :(得分:1)
好的 - 我想我发现了缺少的引号和逗号 - 我添加了两个新列TotalsByDateP - 应该是你想要的那个
declare @sql as varchar(max);
select @sql = 'SELECT Person, Project, [Total P], [Total TS],
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [' + [SortDate] + ' P]'
+ ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then TimesheetHours end), 0) as [' + [SortDate] + ' TS]',
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [TotalsByDateP]'
+ ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then TimesheetHours end), 0) as [TotalsByDateTS]'
from qryPreviousStaticQueryThatProvidesRecords for xml path('')), 1, 1, '');
select @sql += ' FROM qryPreviousStaticQueryThatProvidesRecords GROUP BY Person, Project, [Total P], [Total TS];'; PRINT @sql; exec(@sql);
如果运行正常,请告诉我
如果是这样,您应该在我们的报告查询中看到名为" TotalsByDateP" 的新字段。 将总计字段的控制源更改为" TotalsByDateP"字段 - 分组总和字段为" = Sum([TotalsByDateP])"