【发布时间】:2014-03-13 13:40:36
【问题描述】:
我在 Access 2013 中通过 VBA 在 SQL 查询中使用 filter by form 时遇到问题。我没有创建 Access 表单,但受委托更正一个问题。客户还告诉我,它在以前的 Office 版本中工作,并且 Access-Database 在过去几年中没有更改。看来,Access 2013 做了一些不同的事情。但我不知道是什么。
正如您在下文中所理解的那样,红色突出显示的按钮应该取消/选中所有黄色突出显示的复选框。在我按表单添加过滤器(图像底部的红色框)之前,这非常有效。具有讽刺意味的是,我仅通过过滤 红色下划线字段 Programm_IDFS 才遇到此问题。按其他字段过滤效果很好。
此查询应取消选中复选框,但它会失败,因为 strFilter 的值是:
((Lookup_Programm__IDFS.Name="ad1incl"))
这可能适用于过滤,但它不能作为 SQL 限制。
UPDATE dbo_tbl_ThisForm
SET dbo_tbl_ThisForm.Checkbox = 0,
dbo_tbl_ThisForm.Statusoffen = '0'
WHERE dbo_tbl_ThisForm.Testfall_ID NOT IN
(SELECT dbo_tbl_Restrictions1.Testfall_ID
FROM dbo_tbl_Restrictions1
WHERE dbo_tbl_Restrictions1.Auftrags_ID = " & gsVariable5 & ")
AND dbo_tbl_ThisForm.Testfall_ID NOT IN
(SELECT dbo_tbl_Restrictions1.Testfall_ID
FROM dbo_tbl_Restrictions1
WHERE dbo_tbl_Restrictions1.Auftrags_ID IN
(SELECT Auftrag_ID
FROM dbo_tbl_Restrictions2
WHERE Auftragstyp = " & Me.kfAuftragstyp & "))
AND " & strFilter & "
此查询应选中所有复选框。它之所以有效,是因为我对所有值都进行了硬编码(实际上这仅对strFilter 是必需的)。
UPDATE dbo_tbl_ThisForm
SET dbo_tbl_ThisForm.Checkbox = -1,
dbo_tbl_ThisForm.Statusoffen = '-1'
WHERE dbo_tbl_ThisForm.Testfall_ID NOT IN
(SELECT dbo_tbl_Restrictions1.Testfall_ID
FROM dbo_tbl_Restrictions1
WHERE dbo_tbl_Restrictions1.Auftrags_ID = 544)
AND dbo_tbl_ThisForm.Testfall_ID NOT IN
(SELECT dbo_tbl_Restrictions1.Testfall_ID
FROM dbo_tbl_Restrictions1
WHERE dbo_tbl_Restrictions1.Auftrags_ID IN
(SELECT Auftrag_ID
FROM dbo_tbl_Restrictions2
WHERE Auftragstyp = 9))
AND dbo_tbl_ThisForm.Programm_IDFS = 35
如果您需要更多信息,请随时询问。
感谢任何帮助/建议。提前致谢。
编辑:
使用strFilter=((Lookup_Programm__IDFS.Name="ad1incl")) 运行查询时,出现以下错误:
“运行时错误'3061'。参数太少。应为1。”
我现在才发现,取消/检查也不适用于字段Funktion。这和Programm_IDFS 字段都是表dbo_tbl_ThisForm 中数据类型int 的外键。
当按字段Fachbereich 过滤时,它可以取消/选中复选框,因为该字段是数据类型varchar,所以strFilter 设置为有效值:
((dbo_tbl_ThisForm.Fachbereich="Steuern"))
这些外键都链接到不同的表。现在我该如何解决这个问题?我需要在查询中包含这些表吗?我可以更改表单上的内容吗?
谢谢
【问题讨论】: