组合选项框和组合框以将记录添加到右表

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 添加到模块顶部,它强制执行变量声明并在编译时报告未声明的变量/常量。

这样可以防止 dbdbVideoCollection 混淆。

要在新模块中自动启用此功能,请在 VBA 编辑器中设置 Require Variable Declaration 选项。

2) 请不要使用默认的控件名称,如Check263Command221,尤其是在代码中使用它们时(但您应该使其成为一般习惯)。使用您会识别的有意义的名称。

几个月后,你会看着你的代码,挠头“这行应该做什么......等等,哪一个又是 Check261?”

3) BizApp_ID = Me.Combo257.AfterUpdate 没有意义,您可能只想要BizApp_ID = Me.Combo257.Value

【讨论】:

以上是关于组合选项框和组合框以将记录添加到右表的主要内容,如果未能解决你的问题,请参考以下文章

如何为组合框和列表中的选项添加标签?

从组合框和命令按钮 VBA 添加到工作表

如何将组合框视为另一个表单的链接?

如何在通用 Windows 平台中连接组合框和图像?

带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错

单击时在JavaFX中填充组合框