【问题标题】:Inserting new argument to table through search form of another table通过另一个表的搜索表单向表中插入新参数
【发布时间】:2010-06-15 22:37:04
【问题描述】:

在我的数据库中,我有一个用于搜索产品的表单(字段:id、name、manufacturer_id[设置为显示制造商的名称]、category_id、价格)。我希望有能力通过这个表格添加制造商。所以我创建了 vba 脚本,但它不起作用。仍然当我输入新名称时,它会提示我“从列表中选择元素”。我做错了什么?

Private Sub manufacturer_id_NotInTheList(NewData As String, Response As Integer)

Dim strSQL As String, strInfo As String

strInfo = "Manufacturer " & NewData & " is not on the list." & vbCrLf & "Add?"
If MsgBox(strInfo, vbYesNo + vbQuestion, "Element not on the list") = vbYes Then
  strSQL = "INSERT INTO manufacturer (name, country, id_distributor) VALUES ('" & NewData & "','Undefined', '0');"
  DoCmd.SetWarnings (False)
  DoCmd.RunSQL strSQL
  Response = acDataErrAdded
Else
  Response = acDataErrContinue
  NewData = ""
  Me.manufacturer_id.Text = ""
End If

End Sub

【问题讨论】:

  • 不回答这个问题,但是在调用 DoCmd.RunSQL 之后,您确实需要在某处设置 DoCmd.SetWarnings True,否则您最终可能会错过重要警告(SetWarnings 是系统设置,不会超出范围)。您应该尝试注释掉现有的 DoCmd.SetWarnings 并查看插入是否实际成功。你也可以使用我的 SQLRun() 代码,我已经在 SO 上发布了无数次——它不需要使用 SetWarnings 并且实际上更安全(DoCmd.RunSQL 将应用不一致的更新,而不是完全因错误而失败)。

标签: ms-access vba insert


【解决方案1】:

如果您的下拉框的 Limit to List 属性设置为 true,Access 将首先拦截并抱怨(因为您的用户添加了不在列表中的制造商)。

尝试将 Limit to List 设置为 false,然后您的程序应该运行。

【讨论】:

  • 但他不想将其设置为 True 吗?否则,拥有这段代码有什么意义,因为您可以输入任何您喜欢的内容,而不是将其限制为另一个表中的值?
  • 我收集到他调用此方法来验证字段(例如,在提交时),因为如果用户选择不添加新制造商,else 语句随后会清除文本字段并填充一些错误字段。所以只要他确保这个方法在它是一个新项目时运行,它就会通过询问他们来限制随意的用户输入(我明白你在说什么,并在一定程度上同意你的观点)
  • 选择组合框作为控件的全部意义在于限制数据输入。如果您已为此使用它,则无需在保存整个记录时对其进行验证。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2014-04-30
  • 2021-06-12
  • 2018-12-05
  • 1970-01-01
  • 2012-10-18
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多