【发布时间】:2018-03-10 09:35:40
【问题描述】:
让我解释一下我为轻松描述我的问题而设置的内容。我创建了一个基于表格的子表单,为了说明,它看起来像这个示例:
每个Text Box 都是有界的,即它的Control Source 指向表中相应的字段名称。
在底部有一个保存Command Button,我在其中添加了一些 vba 代码以将 4 个字段值插入到表中。
单击保存按钮后,我执行以下操作以插入表格,然后关闭表单:
db.Execute "INSERT INTO testTable (Number, Name, OtherNumber, OtherName) " _
& "VALUES (" & Me.Number & ", '" & Me.Name _
& Me.OtherNumber & "', '" & Me.OtherName & "')"
DoCmd.Close acForm, "frmTest", acSaveNo
问题是一旦表单被关闭,它会在表格中创建一个重复的条目。
由于我目前不熟悉 vba 编程,我知道这与表格的有界文本框有关,因为如果我从文本框中删除 Control Source 字段,将其留空,然后手动获取值而是在文本框中,即Me.textBox_OtherNumber,然后在单击保存按钮时将这些值插入表中,当表单关闭时,我不会在表中得到重复的条目。
然而,我更喜欢将文本框绑定到表格,因为这样可以更轻松地在字段值为空并等待添加为的 acFormAdd 模式下打开表单new 记录,或在acFormEdit 模式下打开表单,其中字段值已使用@中的WHERE 条件子句参数填充表中选定行的值987654332@.
例如,我有一个包含Command Button 和subform 的父表单。子表单的Source Object 链接到Datasheet,其Record Source 链接到与子表单相同的表。
在Datasheet 的OtherNumber 字段中,我创建了一个hyperlink 并将其On Click 命令编程为如下所示:
Dim uniqID As Integer
Dim criteria As String
uniqID = Me.ID
criteria = "ID = " & uniqID
DoCmd.OpenForm "frmTest", acNormal, , criteria, acFormEdit
当点击特定行的特定hyperlink 时,frmTest 中的字段将填充基于criteria 的数据,这些数据将用于更新当前记录.
但是,如果在父表单中单击Command Button,我会执行以下操作:
DoCmd.OpenForm "frmTest", acNormal, , , acFormAdd
表单已打开,但字段值为空白,表示即将根据字段值添加新记录。
对我来说,这感觉比没有将 frmTest 中的文本框绑定到任何东西要容易得多,如果它没有边界,我将不得不想办法引用 @987654349 中的字段值@ 并传递给子表单frmTest。
你看到我的困境了吗?解决这个问题的最佳方法是什么?
谢谢
【问题讨论】:
-
听起来你在做一些很奇怪的事情。保存按钮背后的代码是什么?它是一个插入语句吗?因为如果您使用的是绑定表单,则任何数据操作都应通过表单记录集完成
-
@ErikvonAsmuth 更新问题