感谢迄今为止所有的社区帮助!引用这个网站是件好事。
我在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
感谢您的时间! 莱恩
答案 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
添加到模块的顶部,它强制执行变量声明并在编译时报告未声明的变量/常量。
这会阻止db
与dbVideoCollection
混淆。
要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。
2)请不要使用默认控件名称,例如Check263
或Command221
,尤其是在代码中使用它们时(但你应该把它作为一般习惯)。使用您将识别的有意义的名称。
从现在开始的几个月你会看到你的代码,抓住你的脑袋“这条线应该做什么......等一下,哪一个是Check261?”。
3)BizApp_ID = Me.Combo257.AfterUpdate
毫无意义,你可能只想简单
BizApp_ID = Me.Combo257.Value
。