将选项框和组合框组合在一起以将记录添加到右表中

时间:2015-12-11 18:31:07

标签: vba ms-access checkbox combobox access-vba

感谢迄今为止所有的社区帮助!引用这个网站是件好事。

我在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

感谢您的时间! 莱恩

2 个答案:

答案 0 :(得分: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

首先,您将数据库调整为数据库。然后你要设置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 & "")

答案 1 :(得分:0)

还有一些事情......

1)我建议将Option Explicit添加到模块的顶部,它强制执行变量声明并在编译时报告未声明的变量/常量。

这会阻止dbdbVideoCollection混淆。

要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。

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

从现在开始的几个月你会看到你的代码,抓住你的脑袋“这条线应该做什么......等一下,哪一个是Check261?”

3)BizApp_ID = Me.Combo257.AfterUpdate毫无意义,你可能只想简单 BizApp_ID = Me.Combo257.Value