一、问题描述:
通过自带的 SetHiddenAttribute 函数隐藏了的查询,如果勾选了显示隐藏对象,查询仍然是可见的,希望寻找一个可以彻底隐藏掉查询的方法:
二、相关代码:
Function setHidenQuery(qryName As String, booHide As Boolean)
CurrentDb.TableDefs("YSys参数").Attributes = 1
On Error Resume Next
Dim tblName As String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("select * from YSys????")
rst.FindFirst ("strName='" & qryName & "'")
tblName = "__TMPTableName"
If booHide = True Then
If rst![strName] <> qryName Then
If (CurrentDb.QueryDefs(qryName).Type = dbQCompound) or _
CurrentDb.QueryDefs(qryName).Type = dbQCrosstab or _
CurrentDb.QueryDefs(qryName).Type = dbQSelect or _
CurrentDb.QueryDefs(qryName).Type = dbQSetOperation Then
CurrentDb.Execute "Select * INTO " & tblName & " FROM " & qryName
CurrentDb.TableDefs(tblName).Attributes = 1
End If
rst.AddNew
rst![strName] = qryName
rst![strSQL] = CurrentDb.QueryDefs(qryName).SQL
rst![strType] = CurrentDb.QueryDefs(qryName).Type
rst.Update
CurrentDb.QueryDefs().Delete qryName
CurrentDb.TableDefs(tblName).Name = qryName
End If
End If
If booHide = False Then
If rst![strName] = qryName Then
If (rst!strType = "160" or rst!strType = "16" or rst!strType = "0" or rst!strType = "128") Then
CurrentDb.TableDefs().Delete qryName
End If
Call CurrentDb.CreateQueryDef(qryName, rst![strSQL])
rst.Delete
End If
End If
rst.Close
Set rst = Nothing
End Function
三、示 例:
点击下载此附件