我有一个SQL Server的Access客户端,它使用带有多个子窗体的选项卡式窗体。基本上,在主窗体上选择了一个产品,然后该标签可以访问编辑/插入存储在不同相关表中的产品的不同属性(选项,颜色,styes等)。每个子表单使用它自己的记录源,但是会同步到产品编号上的主窗体。MS Access选项卡式多个OnCurrent发射
所以,我有一个子窗体中的组合框,将其称为“选项”,我想填充来自使用“where”子句中的产品编号的查询的数据。这就是我需要做的。我如何做到这一点是使用Options子窗体的OnCurrent事件来设置RowSource等于一个SQL字符串。这很有效,但是... OnCurrent事件每次在主窗体中选择新产品时触发,无论Options子窗体表单是否具有焦点。然后,当选项获得焦点时,它再次启动。然后,由于选项使用数据表布局,因此即使记录源不需要更改,它也会触发所选的每个记录。
虽然这可以工作,但是很多不必要的数据被来回发送到(非常)远程的SQL Server。那么,是否有另一个事件可以用于整个子表单,理想情况下只是触发一次,而不是子表单中的每条记录?我尝试了焦点,但从未解雇。当选择新产品时(当然),Open和Load事件不会触发。或者,也许有另一个地方,我应该设置选项子表单记录源?
这里的事件代码:
Private Sub Form_Current()
Dim sql As String
sql = "SELECT O.[OptionID], O.[Caption] FROM ProductOptions AS O WHERE o.[OptionTypeID] in (1,2,8,9) AND o.ProductNumber = "
sql = sql & "'" & Nz(Forms![products main form]!ProductNumber, "99test") & "'"
oidSelect1.RowSource = sql
End Sub
感谢您的帮助。
吉姆
因此,您正在设置组合框的RowSource而非叙述中所述的RecordSource?为什么使用代码来设置组合框的RowSource?为什么不在RowSource属性中使用SQL语句,然后在组合框GotFocus事件中执行代码就会执行RowSource的Requery? – June7
嗯,过滤器(where子句)必须动态设置,因为它对于当前正在编辑的每个产品都会发生变化。并且不会使用GotFocus作为组合框重新选择的每个记录? (这是一个网格视图,所以组合框在每一行都被复制。) – user3091705
组合框RowSource SQL语句WHERE子句将引用ProductNumber,因此它将是动态的。 Seth的回答是沿着这些线,除了我会使用组合框GotFocus事件触发重新查询。他确实对主要形式的依赖很好。通常,主要和从属组合框的形式相同。另外,带有查询显示别名值的组合框在连续数据表或数据表格中不起作用。 – June7