所以这是我第一次与工会合作,我正在尝试查询3个表。
摘要
我正在尝试从3个不同的表(每个表的一个字段)中选择3个具有相同ID的字段。
我希望每组记录都包含3个字段的结果,然后我可以使用3个结果。似乎正在发生的是它获取所有结果并为每个
创建记录集任何指导都会非常感激,因为我知道,我可能会以完全错误的方式解决这个问题。
以下是我正在使用的代码
Dim rs1 As DAO.Recordset
Dim unionquery As String
unionquery = "select
[Test Script] from TEST_SCRIPTS where TEST_ID= " & Me.TEST_ID & "
union select
PROC_ID from PROC_CHECK where TEST_ID= " & Me.TEST_ID & "
union select all
[Software Version] from SOFTWARE_VERSION where TEST_ID= " &
Me.TEST_ID & " "
Set rs1 = CurrentDb.OpenRecordset(unionquery, dbOpenForwardOnly)
If Not (rs1.EOF And rs1.BOF) Then
Do Until rs1.EOF = True
' I THOUGHT THIS WOULD WORK BUT I GET AN ERROR SAYING rs1!PROC_ID AND
' rs1![Software Version] are not part of the recordset
' WHEN I ALERT OUT rs1![Test Script] i get the whole set
MsgBox " " & rs1![Test Script] & ", " & rs1!PROC_ID & ", "
& rs1![Software Version] & " "
Loop
End If
rs1.Close
Set rs1 = Nothing
答案 0 :(得分:1)
将其添加到OpenRecordset
行之前的代码中:
Debug.Print unionquery
然后您可以运行代码,转到立即窗口( Ctrl + g ),并复制联合查询的文本。然后在查询设计器中创建一个新查询,切换到SQL视图,粘贴文本,然后运行查询。
这项工作将允许您查看查询返回的字段...您会立即注意到名为PROC_ID
和[Software Version]
的字段未包含在该记录集中。我想你会看到一个名为[Test Script]
的字段,但请自行检查。
您的第一个业务订单必须是修改查询,以便它返回您想要的信息。在查询设计器中使用该查询后,修改您的VBA代码以使用该查询的SQL。
答案 1 :(得分:1)
“UNION”子句追加行而不是列。因此,生成的记录集只有一个名为[Test Script]的列,其中填充了来自
的过滤值a: TEST_SCRIPTS where TEST_ID= " & Me.TEST_ID
b: PROC_CHECK where TEST_ID= " & Me.TEST_ID
c: SOFTWARE_VERSION where TEST_ID= " & Me.TEST_ID
你可能想要这样的查询
select [Test Script] , [PROC_ID] , [Software Version] FROM (TEST_SCRIPTS INNER JOIN
PROC_CHECK ON TEST_SCRIPTS.TEST_ID = PROC_CHECK.TEST_ID) INNER JOIN AS SOFTWRE_VERSION ON
TEST_SCRIPTS.TEST_ID = SOFTWRE_VERSION.TEST_ID;
所以你可以得到(如果TEST_ID在表中是唯一的)一行和访问字段,如你在rs1中输入的那样![Test Script]& “,”& rs1!PROC_ID& “,”& rs1![软件版本]& “”