【问题标题】:Fill primary key of form when openened with key of current record on form使用表单上当前记录的键打开时填写表单的主键
【发布时间】:2015-07-25 19:32:11
【问题描述】:

我有一个带有按钮的访问表单,用于打开表单以将新实体添加到包含相关数据的表中。打开此表单时,我希望正在添加的新实体的主键自动填充用户单击按钮以打开新表单的表单上打开的记录的主键...有道理吗?

这样的事情可能吗?

编辑:

在玩了一些之后,我想我需要提供更多信息:

我有一个表,相关实体可以作为“锁定”数据表视图子表单添加到我的主表单中。当我点击“修改”按钮时,我希望用户能够通过不同的更用户友好的表单添加新记录。但是,当添加新记录时,会显示一条错误消息,指出“主键”不能包含一个空值。

如果我将数据表视图子表单保持为解锁状态,这似乎不会发生。有人可以帮忙吗?

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    将 OpenArgs 放在一个全局变量上,然后在表单的当前事件上使用它将它插入到新的实体中。

    在模块级别

    Global gArgsTransferred as Long
    

    在表单级别

    Private Sub Form_Current()
    If Len(aArgsTransferred) >0 then
    'Fill the Entity with the transferred argument
    End if
    End Sub
    

    【讨论】:

    • 谢谢,我认为这已经接近我所需要的了。在模块中将变量声明为全局时,出现编译错误:“常量、固定长度字符串、数组、用户定义类型和声明语句不允许作为对象模块的公共成员”。有什么建议吗?
    • 这是一个奇怪的错误...请记住,全局变量是在模块顶部“选项 xxxx”下方的任何函数之外声明的
    • 是的,这就是我试图放置它的地方。我已经解决了这个问题 - 问题是我将它放在表单的对象模块中。我创建了一个新模块,错误消失了。谢谢!一个后续问题:按下按钮时如何“设置”该全局变量?
    • 您可以使用按钮单击,但我更愿意将其分配给您要用于插入实体的表单的加载事件....Private Sub Form_Load()If Len(Me.OpenArgs) > 0 ThengArgsTransferred = Me.OpenArgs@ 987654326@ 无论哪种方式都有效...一旦您“设置”全局变量,直到程序退出...
    • 太棒了。谢谢您的帮助。这正是我所需要的。出于好奇,设置表单加载而不是单击按钮是否有好处?
    【解决方案2】:

    是的,这是可能的。

    在按钮的 Button_click-event 中使用以下代码:

    Sub btn_Click()
    
    DoCmd.OpenForm "yourFormName", , , txtYourPrimaryKeyField
    
    End Sub
    

    此命令打开带有您的主键记录的表单。

    此命令的参考:https://msdn.microsoft.com/en-us/library/office/ff820845.aspx

    【讨论】:

    • 感谢您的回复,该命令将密钥作为 where 子句的一部分传递。我希望用户能够添加新记录并将密钥设置为另一个表单上先前记录的当前 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多