vba - 在具有要加载的宏(空白)的表单中加载现有记录作为新记录
问题描述
场景:Microsoft Access 2016 中的空白表单(我们称之为表单 B),其中包含一个宏,导致表单在加载时为空白(新记录);但是,我还想实现一个按钮,该按钮会导致在不同表单(表单 A)上选择的记录加载到表单 B。
逻辑是表单 A 填充有从列表框中选择的记录。用户无法修改此记录,因为它出现在表格 A 上(控件已锁定);但是,包含记录列表的列表框是从动态搜索查询中填充的。如果用户没有找到合适的记录,用户点击一个按钮来打开表单 B,它允许用户输入一个新的记录。输入该记录后,用户现在可以使用搜索框查找新输入的记录。
如果用户选择了一条记录并注意到由于数据不正确需要编辑该记录,我想实现一个按钮,用户可以单击该按钮将Form A中的记录加载到Form B中进行编辑。
我不知道如何在 VBA 中以编程方式执行此操作,但伪代码看起来像这样:
私人子
单击edit_record_button后,将表单B设置为不加载“转到新记录”
使用表格 A 中的当前记录加载表格 B
结束子
请在下面查看我的代码:我认为 '#' 正在破坏代码(错误的属性设计):
Private Sub Command438_Click()
If Me.Dirty = True Then Me.Dirty = False
DoCmd.OpenForm "Add Escort",,,WhereCondition:="Credential # = " & Me!Credential #
End Sub
解决方案
这样做的方法是删除将表单跳转到新记录的代码和部分,一切都很好,并准备好输入新的记录。
您使用决斗的想法和目标(添加相同的表单,或编辑现有的)当然是有道理的 - 您希望在此处对表单进行决斗。
你这样做的方式?现在,要以添加模式打开表单,请执行以下操作:
docmd.OpenForm "frmCustomers",,,,acFormAdd
所以这将以添加模式启动表单 - 在一个新的空白记录上。
但是,要编辑现有的,比如提示用户输入客户编号
dim strCustNo as string
strCustNo = Inputbox("Enter customer number")
docmd.OpenForm "frmCustomers",,,"ID = " & strCustNo
因此,这会将表单打开到一个给定的客户编号。
或者,您可以打开表单来编辑所有记录,如下所示:
docmd.OpenForm "frmCustomers"
因此,诀窍是删除将表单跳转到新空白记录的代码和内容,然后在打开/启动您控制的表单的代码中,如果您编辑所有记录、以添加模式打开,甚至跳转到并编辑一个记录。
我还建议您在其他表的属性表中将表单循环属性设置为当前记录 - 因为如果您在表单上的最后一个控件/字段上并点击选项卡,您最终可以跳转到一个新的空白记录,并在大多数情况下你不想要这个。
你甚至可以关闭表单的允许添加属性,上面在添加模式下打开将只允许添加一条记录——这通常是一个不错的 UI 选择来折腾一个表单,让用户添加一条记录,然后他们关闭窗体。无论如何,这里的主要技巧和想法是,通过选择如何打开表单,然后您可以控制是添加记录还是编辑记录 - 加载时您不需要或在表单中有特殊代码始终跳转到新的空白记录(因此删除该代码/部分)并使用 openFrom 命令的功能控制此操作。
编辑
有人指出,上面的“ID”示例很差。是的,它是/是一些空气代码,在大多数情况下甚至会避免使用输入框。
如果您要说这样的详细信息表格:
甚至是显示单个记录的表单?
然后要将表单启动到一条记录,您将使用以下命令:
if me.Dirty = true then me.Dirty = false ' optional if editing can occur
docmd.Openfrom "frmDetailsEdit",,,"ID = " & ME!ID
推荐阅读
- javascript - ajax 方法 post 发送到 mysql 查询
- javascript - 关于 Javascript 对象的字符串键顺序
- android - 谷歌游戏服务只适用于第一次然后不再登录
- google-analytics - 无法通过 Management API 更新网络媒体资源帐户 ID
- maven - 使用 Jenkins 自动化 TIBCO 上的构建过程
- javascript - 在页面卸载时显示 confim 弹出窗口 [重复]
- python - 不支持标头的 elasticsearch.index 错误
- mule - 决定是否在 Mule 4 中使用 WHERE 子句的动态 SELECT 查询
- npm - Angular 5:是否可以链接本地 npm 模块?
- dart - 如何在自定义按钮颤动中给 onPressed 一个方法