是的,有一种方法可以确定一个查询是否被另一个查询使用。我创建了一个表单来执行此操作,以便我可以选择多个数据库对象并同时删除它们,因为我讨厌 Access 如何只允许您一次本地删除 1 个数据库对象(即表单、表等),而我想确保我想删除的数据库对象没有在其他地方引用。
不幸的是,我无法从我的工作计算机上传表格,他们阻止了这些东西。但是,我可以告诉您,您需要做的是搜索数据库中每个 QueryDef 的 QueryDef.SQL。
您将不得不将其分开一点,但这是我为此编写的 VBA。
Private Sub ListObjects_Click()
' Search all queries for SQL containing the specified string.
Screen.MousePointer = 11
On Error GoTo Err_SearchQueries
Dim db As DAO.Database
Dim qdf As QueryDef
Dim varTest As Variant
Dim lngSearchCount As Long
Dim lngFoundCount As Long
Set db = CurrentDb
lngFoundCount = 0
lngSearchCount = 0
Me.txtTblSearch = "*** Beginning search for " & Me.ListObjects.Column(0) & "..." & vbCrLf
'Get a count of the database objects that will be searched
For Each qdf In db.QueryDefs
With qdf
If Left(qdf.Name, 3) = "~sq" Then
lngSearchCount = lngSearchCount + 1
End If
End With
Next qdf
For Each qd In db.QueryDefs
If InStr(1, qd.SQL, Me.ListObjects.Column(0)) > 0 Then
If Left(qd.Name, 4) = "~sq_" Then
If Mid(qd.Name, 5, 1) = "f" Then
Me.txtTblSearch = txtTblSearch & "found in Form " & Right(qd.Name, Len(qd.Name) - 5) & vbCrLf
lngFoundCount = lngFoundCount + 1
ElseIf Mid(qd.Name, 5, 1) = "r" Then
Me.txtTblSearch = txtTblSearch & "found in Report " & Right(qd.Name, Len(qd.Name) - 5) & vbCrLf
lngFoundCount = lngFoundCount + 1
ElseIf Mid(qd.Name, 5, 1) = "d" Then
Me.txtTblSearch = txtTblSearch & "found in Report " & Right(qd.Name, Len(qd.Name) - 5) & vbCrLf
lngFoundCount = lngFoundCount + 1
ElseIf Mid(qd.Name, 5, 1) = "c" Then
Me.txtTblSearch = txtTblSearch & "found in a control in Form " & Right(qd.Name, Len(qd.Name) - 5) & vbCrLf
lngFoundCount = lngFoundCount + 1
End If
Else
Me.txtTblSearch = txtTblSearch & "found in Query " & qd.Name & vbCrLf
lngFoundCount = lngFoundCount + 1
End If
End If
Next qd
Set qd = Nothing
Set db = Nothing
Exit_SearchQueries:
Set qdf = Nothing
Set db = Nothing
Me.txtTblSearch = Me.txtTblSearch & vbCrLf
Me.txtTblSearch = Me.txtTblSearch & "*** Searched " & lngSearchCount & _
" objects, found " & lngFoundCount & " occurrences."
Screen.MousePointer = 0
Exit Sub
'If an error is thrown, alert the user as to which object caused it
Err_SearchQueries:
MsgBox Err.Description, vbExclamation, "Error " & Err.Number
If IsNull(qd.Name) Then
Else
MsgBox "Possible issue with query: " & qd.Name
End If
Screen.MousePointer = 0
Resume Exit_SearchQueries
End Sub
这是一张正在运行的表格的图片,给你一个想法:
