我是Access的新手,我来自C#,SQL Server和.Net . 有一个项目来了我的方式,我必须完成一些部分 .
该场景可以描述为:
-
带有子表单的Access表单
-
作为上述子表单的数据源的Access查询,带有两个参数,显示为:
Parametername1 String(255),Parametername2 String(255)
. -
VBA代码模块
我的计划是在我的VBA代码模块中的过程中设置上述查询参数的值 . 我相信这应该刷新我的子表单,因为查询是子表单的数据源 .
问题是我不知道如何实施这个计划 .
我想使用查询,因为我不想使用内联SQL搞乱我的VBA代码 .
我正在使用Access 2010 .
4 回答
我有这个问题,我想使用相同的'存储'更新查询,但是从两种不同的形式执行它,所以想在运行时将参数传递给查询 . 这就是我发现的(在另一个论坛中),它完全符合我的要求:
子表单的重点是它由记录源和链接子字段和主字段控制 . 我们说表单是Company,子表单是Employees,子表单的记录源可能是:
链接子字段和主字段将是CompanyID . 当您浏览主表单时,仅显示与当前公司相关的那些记录 . 我们假设您只想显示处于技术位置的员工,您可以在运行时更改记录源:
或者,如果这始终是表单上的过滤器,请将组合框添加到主表单中,并将其用作第二个链接主字段,这样您就可以:
最后,您只需从主窗体设置过滤器属性:
如果这不是您的想法,请在您的问题中添加一些注释 .
EDIT
您可以通过引用表单上的控件为查询提供参数:
您可以完全更改查询的SQL并且可以使用ADO,但是,更改SQL类似于设置记录源,因为SQL在代码中已更改,并且使用ADO通常不是表单的最佳选择 .
你不能做的是改变一个参数,让它“坚持”一个表格或子表格 .
例如:
您可以在表单的记录源查询中创建一个函数并使用该函数(而不是常规参数) .
记录源查询:
稍后,如果要在子窗体中显示不同的行集,请更改分配给
PositionParam()
和Requery
子窗体的值 .子表单绑定到查询,该查询根本不应包含任何参数 .
您当然可以将子表单的SQL存储在查询中,这样就可以消除内联的sql,然后转而编写WHACKS代码来解决这个问题根本就没有意义吗?
如上所述,子表单重新编码的过滤和显示是自动的,如果您从控件设置子主链接和子设置,则无代码 . 你可能在这里不需要任何代码 .
但是,如果由于某些真正的原因您需要编写代码或想要更多的计费时间,那么您可以使用此代码:
因此,您不需要sql中的任何参数,只需使用子表单所基于的CURRENT和SAME查询 . 此外,如果您添加参数,那么您正在对查询中的2个值进行硬编码,然后查询不能用于其他代码和任务,除非您提供2个SAME硬编码参数(因此这在其他地方使用该查询时几乎没有任何灵活性)有不同的选择) .
因此,请将参数保留在查询之外,并将相同的金钱和时间以及可计费小时数保留下来 .
按上述方式提取查询SQL并向SQL添加条件是一件简单的事情 . 但是,如果要将数据插入子表单,则可以直接使用子表单数据源和reocrdset . 例如: