组合选项框和组合框以将记录添加到右表
Posted
技术标签:
【中文标题】组合选项框和组合框以将记录添加到右表【英文标题】:Combining Option Boxes and Combo Boxes to Add Records to the right table 【发布时间】:2015-12-11 18:31:07 【问题描述】:感谢迄今为止所有的社区帮助!引用这个网站是一件美好的事情。
我在 Access 中设计了一个前端,但无法让我的 VBA 代码正常工作...非常感谢任何反馈或建议!我对 VB 还是很陌生,很可能缺少此用例的一些基本组件....
基本上我的数据库由 8 个表和连接它们的关系表组成。我想构建允许用户将一个表中的实体“附加”或关联到表单中的其他实体的功能。
选项按钮指向不同的实体表并设置组合框的记录源以选择任何给定的记录。
问题:我的问题是尝试使用用户提供/选择的所有信息(使用组合框)创建新记录
调试器已确定此行存在问题:
Set rs = db.OpenRecordset(BUS_APP_SERVER_REL)
.. 但我的完整代码如下:
Private Sub Check259_Click()
Dim BP4_BizApp As String
BP4_BizApp = "SELECT [BUS_APPL_NAME],[BUS_APPL_ID] FROM [BUSINESS_APPLICATIONS] ORDER BY [BUS_APPL_NAME]"
If Me.Check259 = True Then
Me.Combo257.RowSource = BP4_BizApp
End If
End Sub
Private Sub Check261_Click()
Dim BP4_ITApp As String
BP4_ITApp = "SELECT [IT_APPL_NAME],[IT_APPL_ID] FROM [IT_APPLICATIONS] ORDER BY [IT_APPL_NAME]"
If Me.Check261 = -1 Then
Me.Combo257.RowSource = BP4_ITApp
End If
End Sub
Private Sub Check263_Click()
Dim BP4_Tool As String
BP4_Tool = "SELECT [TOOL_NAME],[TOOL_ID] FROM [TOOLS] ORDER BY [TOOL_NAME]"
If Me.Check263 = -1 Then
Me.Combo257.RowSource = BP4_Tool
End If
End Sub
Private Sub Check_265_Click()
Dim BP4_DB As String
BP4_DB = "SELECT [DB_NAME],[DB_ID] FROM [Databases] ORDER BY [DB_NAME]"
If Me.Check265 = -1 Then
Me.Combo257.RowSource = BP4_DB
End If
End Sub
Private Sub Command221_Click()
Dim db As Database
Dim rs As DAO.Recordset
Dim SVR_ID As Variant
Dim BizApp_ID As Variant
Dim ENV As Variant
Dim COMM As String
BizApp_ID = Me.Combo257.AfterUpdate
SVR_ID = Me!SERVER_ID
ENV = Me.Combo214.AfterUpdate
COMM = Me!Text216
Set dbVideoCollection = CurrentDb
Set rs = db.OpenRecordset(BUS_APP_SERVER_REL)
rs.AddNew
rs(BUS_APPL_ID).Value = BizApp_ID
rs("SERVER_ID").Value = SVR_ID
rs("ENV_TYPE").Value = ENV
rs("COMMENTS").Value = COMM
rs.Update
End Sub
感谢您的宝贵时间! 瑞恩
【问题讨论】:
欢迎来到 Stack Overflow,Ryan。BUS_APP_SERVER_REL
是什么?如果那是表的名称或保存的查询,请在其周围加上引号:db.OpenRecordset("BUS_APP_SERVER_REL")
如果它是字符串变量的名称,那么它的值是多少?
【参考方案1】:
这里有几件事。让我们看看这个子:
Private Sub Command221_Click()
Dim db As Database
Dim rs As DAO.Recordset
Dim SVR_ID As Variant
Dim BizApp_ID As Variant
Dim ENV As Variant
Dim COMM As String
BizApp_ID = Me.Combo257.AfterUpdate
SVR_ID = Me!SERVER_ID
ENV = Me.Combo214.AfterUpdate
COMM = Me!Text216
Set dbVideoCollection = CurrentDb
Set rs = db.OpenRecordset(BUS_APP_SERVER_REL)
rs.AddNew
rs(BUS_APPL_ID).Value = BizApp_ID
rs("SERVER_ID").Value = SVR_ID
rs("ENV_TYPE").Value = ENV
rs("COMMENTS").Value = COMM
rs.Update
End Sub
首先,您将 db 调暗为数据库。然后设置 dbVideoCollection = CurrentDb。然后你正在使用 db.OpenRecordset。我认为您想将“dbVideoCollection”更改为“db”。
然后,正如 HansUp 所注意到的,您已经获得了 BUS_APP_SERVER_REL。如果是表名或查询名,则必须用引号引起来。
Set rs = db.OpenRecordset("BUS_APP_SERVER_REL")
如果是变量名,则必须用引号括起来(我相信):
Set rs = db.OpenRecordset("" & BUS_APP_SERVER_REL & "")
【讨论】:
你说得对,JB,有多个问题。你觉得BizApp_ID = Me.Combo257.AfterUpdate
怎么样?
我从未听说过将变量设置为等于事件,我只是想它可能是我从未使用过的东西。
您可以使用Me.myControl.AfterUpdate
(它是控件的属性),但通常它会简单地给出[Event Procedure]
或函数名称。肯定不是 OP 想要达到的目标。【参考方案2】:
还有一些事情......
1) 我建议将Option Explicit
添加到模块顶部,它强制执行变量声明并在编译时报告未声明的变量/常量。
这样可以防止 db
与 dbVideoCollection
混淆。
要在新模块中自动启用此功能,请在 VBA 编辑器中设置 Require Variable Declaration 选项。
2) 请不要使用默认的控件名称,如Check263
或Command221
,尤其是在代码中使用它们时(但您应该使其成为一般习惯)。使用您会识别的有意义的名称。
几个月后,你会看着你的代码,挠头“这行应该做什么......等等,哪一个又是 Check261?”。
3) BizApp_ID = Me.Combo257.AfterUpdate
没有意义,您可能只想要BizApp_ID = Me.Combo257.Value
。
【讨论】:
以上是关于组合选项框和组合框以将记录添加到右表的主要内容,如果未能解决你的问题,请参考以下文章
带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错