Access VBA中的SELECT查询

时间:2015-12-22 13:55:27

标签: vba ms-access access-vba

我有一个Access数据库,包含两个表,Individuals&对。个人包括两列; 'Bird_ID'和'Parents_Pair_number'和Pairs由三列组成; 'Pair','Female_ID'和'Male_ID'。 'parents_Pair_number'和'Pair'具有多对一的关系。通过这种关系,人们可以检查一个人的父母。

但现在我正在考虑使用表格制作自动化的家谱。我的计划是创建一个字段(Bird_ID_Field),您可以在其中找到某个人,并且其他字段(如父亲,母亲,父亲父亲等等)将根据该条目自动填充。

我尝试使用以下VBA代码自动填充Father_ID(字段):

Dim strSQL As String
Dim strBird_ID As String
If Bird_ID_Field <> "" Then
strBird_ID = Bird_ID_Field
strSQL = "SELECT Pairs.[Male_ID] " & _
         "FROM Pairs " & _
         "WHERE PAIR = (SELECT Individuals.[Parents_Pair_number] FROM Individuals WHERE Individuals.[Bird_ID]= '" & strBird_ID & "');"

DoCmd.OpenQuery strSQL

Father_ID = strSQL
End If

但是在更新了Bird_ID_Field后,我收到以下错误:Microsoft Access无法找到对象''。

你知道什么是错的吗?

向前谢谢! 的Jeroen

1 个答案:

答案 0 :(得分:0)

您应该使用记录集:

Dim rst As Recordset
Dim strSQL As String

If Nz(Bird_ID_Field,"") <> "" Then
    strBird_ID = Nz(Bird_ID_Field, "")
    strSQL = "SELECT Pairs.[Male_ID] " & _
             "FROM Pairs " & _
             "WHERE PAIR = (SELECT Individuals.[Parents_Pair_number] FROM Individuals WHERE Individuals.[Bird_ID]= '" & strBird_ID & "');"

    Set rst = CurrentDb.OpenRecordset(strSQL)
    If rst.RecordCount > 0 Then
        Father_ID = rst![Male_ID]
    End If
End If

rst.Close
Set rst = Nothing

我还建议使用JOIN来加入表而不是子查询。