我正在尝试创建将在文本框中具有操作链接的报告,该文档框将更新数据库中的记录。首先,我使用" 在单一交易中执行"创建了数据源。设置。我创建了使用param调用存储过程的 dataset : 然后指定参数: 我创建了最后一列是" Action"的表格。
在TextBox属性中,在Action菜单中设置为转到同一报表并将param值设置为表中的值:
问题是它只能工作一次,如果我再次点击同一个字段,则不会执行过程。我想那个参数没有设定,但我不确定。
更新
经过一段时间的游戏后,我看到,该变量已设置,因此问题不在变量中。此外,如果我单击另一行,则此行将按预期更新。之后我也可以更新第一行,所以问题是我无法在滚动中两次更新同一行。
CREATE PROCEDURE [dbo].[change_salesperson_status]
@code AS CHAR(5)
AS
BEGIN
INSERT INTO dbo.test VALUES (@code);
IF (@code = 'test') RETURN 1;
UPDATE dbo.salespersons
SET status_code = CASE WHEN status_code = 'I' THEN 'A' ELSE 'I' END
WHERE code = @code;
END;
GO
CREATE TABLE dbo.test
(
a VARCHAR(200)
)
UPDATE2: 我能够解决这个问题。我添加了内部日期时间变量,默认值为= NOW(),此强制SSRS每次都刷新报告。
答案 0 :(得分:1)
这不是一个真正的答案,它是我如何做到这一点的指南,但是太久不能作为评论。
我已完成了其中一些报告,从未遇到过任何问题。我怀疑你的工作流程不太合适。
我通常做的是编写一个数据集查询,该查询接受更新数据库的参数,除非传递默认值。
我不确定你要做什么,但如果我们举一个简单的例子,创建一个名为myReport
的报告,如果点击一列,员工就会处于非活动状态,那么我们可能会有一个简单的表< / p>
EmpID EmpName MakeInactive
1 Dave click
2 Bob click
数据集看起来像这样......
SET NOCOUNT ON
IF @EmployeeID > 0
BEGIN
UPDATE myTable SET Active = 0 WHERE EmpID = @EmployeeID
END
SELECT EmpID, EmpName FROM myTable
myReport
报告在这个简单的情况下只有一个参数@EmployeeID
,默认值为-1
所以当我们第一次运行报告时,不会发生任何更新。
在最后一列中,您可以按原样执行操作,即将操作设置为调用相同的报告(myReport
),并将@EmployeeID
参数设置为EmpID
第一栏。
这就是我要做的所有事情,我不会使用单笔交易或其他任何事情,我只是按照上述方式进行操作。