在 VBA 中访问选择组合框列返回“函数未定义”-错误
Posted
技术标签:
【中文标题】在 VBA 中访问选择组合框列返回“函数未定义”-错误【英文标题】:Access selecting combobox column in VBA returns "function not defined"-error 【发布时间】:2018-02-19 13:38:49 【问题描述】:当尝试在 VBA 中访问我的组合框的特定列值时,我会收到一个运行时错误,告诉我“函数未定义”。
我的调用结构中是否有任何错误或其他错误?
我之前完全清除了主题表,现在想从带有两个列的组合框中插入新数据:
strAdd = "INSERT INTO TopicsTbl ( TopicName, CategoryID, CategoryName) " & _
"VALUES (Forms!frmAdd_Rename_Delete_Topic!txtTopicName, Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(0), Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(1));"
值调用在 vba 中的一行,所以请假设“line1”和_“line2”不是问题。 (这里显示不好)
提前致谢!
【问题讨论】:
请查看How do I format my code blocks?。是一两行吗? 感谢您的编辑,我不知道这一点。我将 INSERT INTO 和 VALUES 分隔在两个不同的行中,是的,但不是值(文本):) 【参考方案1】:问题在于您引用列号的方式。您可以通过使用参数或字符串连接来解决此问题:
使用字符串连接:
strAdd = "INSERT INTO TopicsTbl ( TopicName, CategoryID, CategoryName) " & _
"VALUES (Forms!frmAdd_Rename_Delete_Topic!txtTopicName, " & Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(0) & ", """ & Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(1) & """);"
我假设第一个连接列是一个数字,第二个是数据库中的字符串。字符串连接是一种不好的做法,因为它会打开数据库以进行 SQL 注入,并且在存储包含字符串分隔符的值时会导致错误。
作为替代,使用参数(我使用隐式参数类型,有时需要显式类型):
strAdd = "INSERT INTO TopicsTbl ( TopicName, CategoryID, CategoryName) " & _
"VALUES (Forms!frmAdd_Rename_Delete_Topic!txtTopicName, ?, ?);"
Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQueryDef("",strAdd)
qd.Parameters(0) = Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(0)
qd.Parameters(1) = Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(1)
qd.Execute
【讨论】:
非常感谢!几天来我一直在努力解决这个问题,非常感谢您花时间帮助我!我使用了您的第一个解决方案,因为它是内部使用的数据库,不应该是安全问题以上是关于在 VBA 中访问选择组合框列返回“函数未定义”-错误的主要内容,如果未能解决你的问题,请参考以下文章