首页 文章

MS Access选项卡形成多个OnCurrent激活

提问于
浏览
0

我有一个SQL Server的Access客户端,它使用带有多个子表单的选项卡式表单 . 基本上,在主窗体上选择产品,然后选项卡可以访问编辑/插入存储在不同相关表中的产品的不同属性(选项,颜色,styes等) . 每个子表单都使用它自己的记录源,但会同步到产品编号的主表单 .

所以,我在一个子窗体中有一个组合框,称之为“选项”,我希望使用“where”子句中使用产品编号的查询填充数据 . 这就是我需要做的 . 我是如何使用Options子窗体的OnCurrent事件将RowSource设置为等于SQL字符串 . 这样可行,但是......每次在主窗体中选择新产品时,OnCurrent事件都会触发,无论选项子窗体是否具有焦点 . 然后当Options获得焦点时它再次触发 . 然后,由于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

谢谢你的帮助 .

吉姆

1 回答

  • 0

    我相信这样做的正确方法是不动态更改组合框的行源 . 相反,使用查询设计器将rowsource设置为查询,并让查询从“主窗体”中读取值,如示例代码中所示... Forms![产品主窗体]!ProductNumber .

    然后我将使用MAIN FORMs AfterUpdate事件触发组合框的刷新 . 它将类似于MainForm!MySubForm.Form(“mycombobox”) . requery . (我可能没有完全正确的语法...我的访问语法生锈 . )

    顺便说一句,我不喜欢自己的答案 . 原因是您正在硬编码子窗体与其父窗体之间的依赖关系 . 如果你永远不会在其他任何地方使用该子表单,那可能没问题 . 为了解决这个问题,一些Access Developers使用一个隐藏的表单,该表单包含您从主表单的After Update事件中设置的文本框 . 然后更新查询以引用您为此表单创建的隐藏表单的文本框 .

    还有其他方法可以做到这一点(例如公共功能) . 但对不起,这不是你要求的 . 我的第一种方法会起作用 . 但是,第一次需要重新使用该子表单时,您需要重构,隐藏的表单解决方案非常有效 .

相关问题