【发布时间】:2014-01-12 18:36:11
【问题描述】:
所以我在这个问题上一直摸不着头脑,虽然理论上看起来很简单,但我很难在 VBA 中实现它。
需要一些项目背景才能理解我想要做什么
因此,我们的数据库/应用程序旨在跟踪我们如何测试软件版本、结果是什么以及测试是否正确完成。我们有一组特定的脚本,我们使用不同的版本。
在数据库中,我们有一个表格列出了这些脚本,而没有将它们分配给特定的软件版本。
然后我们有一个表格,您可以在其中选择您正在运行的软件版本。
这是我遇到的问题
当您选择了一个软件版本后,我希望您点击一个按钮,它会获取所有相关的测试脚本复制它们并分配选定的软件版本(如果尚未完成)。这将允许您为可能因版本而异的特定脚本做笔记。
我目前正在尝试使用联合查询来执行此操作,并尝试使用附加查询,但运气不佳,我将代码 sn-p 放在单击按钮执行时得到的结果下方软件版本的分配它会提醒正确的“测试脚本”、PROC_CHECK_ID 和“软件版本”,但随后我收到一个奇怪的提示,即“输入参数值”,它是带有文本字段的“测试脚本名称”,这个进入一个无限循环,我可以继续在文本字段中输入值。
这是我的代码
Dim rs1 As DAO.Recordset
Dim unionquery As String
Dim CURRENT_SOFTWARE_VERSION As String
CURRENT_SOFTWARE_VERSION = Me.Parent.[Software Version].Value
unionquery = "select [Test Script] , [PROC_CHECK_ID], [Software Version] from (FORMAL_CERT_PROCEDURE_TEST_SCRIPTS inner join FORMAL_CERT_PROCEDURE_CHECK on FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = FORMAL_CERT_PROCEDURE_CHECK.TEST_CASE_ID) inner join FORMAL_CERT_SOFTWARE_VERSION on FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = FORMAL_CERT_SOFTWARE_VERSION.TEST_CASE_ID where PROC_CHECK_ID=" & Me.PROC_CHECK_ID & " AND [Software Version]=""" & CURRENT_SOFTWARE_VERSION & """ "
' Debug.Print unionquery
Set rs1 = CurrentDb.OpenRecordset(unionquery, dbOpenForwardOnly)
If Not (rs1.EOF And rs1.BOF) Then
Do Until rs1.EOF = True
' MsgBox " " & rs1![Test Script] & ", " & rs1![PROC_CHECK_ID] & ", " & rs1![Software Version] & " "
INSERT_INTO_TEST_SCRIPTS = "insert into FORMAL_CERT_PROCEDURE_TEST_SCRIPTS([Test Script], [PROC_CHECK_ID_FK], [Software_Version], [TEST_CASE_ID]) values(" & rs1![Test Script] & ", " & rs1!PROC_CHECK_ID & ", " & rs1![Software Version].Value & ", " & Me.TEST_CASE_ID & ")"
' APPEND QUERY THAT THROWS INTO AN INFINITE LOOP *NEEDS WORK* INSERT_INTO_TEST_SCRIPTS = "INSERT INTO FORMAL_CERT_PROCEDURE_TEST_SCRIPTS([Test Script], [PROC_CHECK_ID_FK], [Software_Version], [TEST_CASE_ID]) SELECT FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.[Test Script], " & rs1!PROC_CHECK_ID & ", " & rs1![Software Version].Value & ", FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID FROM FORMAL_CERT_PROCEDURE_TEST_SCRIPTS WHERE FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = " & Me.TEST_CASE_ID & " "
DoCmd.SetWarnings False
DoCmd.RunSQL INSERT_INTO_TEST_SCRIPTS
DoCmd.SetWarnings True
rs1.MoveNext
Loop
End If
我感谢任何帮助,并愿意完全重做这个机制,我可能过于复杂了:/
谢谢!
【问题讨论】:
-
看起来您在第一个查询中引用了软件版本,但没有在第二个查询中引用。此外,如果您有拼写错误,通常会打开“输入参数值”对话框,而您并不打算这样做。
-
另外,您的“unionquery”中没有
UNION,所以我不会称它为“unionquery”。我认为使用带有条件的查询来检查软件版本是否为空会更容易。像这样的东西:"UPDATE FORMAL_CERT_PROCEDURE_TEST_SCRIPTS SET [Software Version]=""" & Me.Parent.[Software Version].Value & """ WHERE [Software Version] Is Null;"...我想我只是误解了你的解释,所以这可能没有帮助。
标签: ms-access vba ms-access-2007