Office中国论坛/Access中国论坛

标题: ADO隐藏表的代码能否改成隐藏查询? [打印本页]

作者: ycxchen    时间: 2013-12-7 11:08
标题: ADO隐藏表的代码能否改成隐藏查询?
下面的代码是网上下载的,能否改成彻底隐藏查询的?请高手指教。

ADO编程隐藏表
sub hide_table()
Dim cnn As New ADODB.Connection
Dim cat As New ADOX.Catalog

Set cat.ActiveConnection = CurrentProject.Connection
Dim tbl As ADOX.Table
Dim pro As Property
For Each tbl In cat.Tables
Debug.Print tbl.name
For Each pro In tbl.Properties
Debug.Print pro.name & "=" & pro.Value
Next
If tbl.name = "需要隐藏的表名" Then tbl.Properties.Item("JetOLEDB:Table Hidden In Access") = True
Next
End Sub



同理,你还可以隐藏其他的数据库对象,一样使用 ADO


作者: 盗梦    时间: 2013-12-7 11:11
ADOX.Table 改成 ADOX.QueryDef
作者: ycxchen    时间: 2013-12-7 11:37
按2楼的办法改动不行的,提示cat As New ADOX.Catalog未定义。请问,如何办?
作者: ycxchen    时间: 2013-12-7 11:52
看过帮助,不明。
作者: 好运牛    时间: 2013-12-7 14:28
查询隐藏不了

作者: leonshi    时间: 2013-12-7 14:41
查询可以用代码隐藏,但是不能达到隐藏表那样的效果。如果你想达到你预期的效果查询尽量使用代码来实现查询
作者: netguestcn    时间: 2013-12-7 21:05
Public Function XianShiChaXun()
    On Error GoTo Err_XianShiChaXun
    '======================================================================================
    '显示系统中所有的查询
    'DoCmd.SetWarnings 0     '关闭系统提示

    Dim db As Database
    Dim i As Integer
    Set db = DBEngine.Workspaces(0).Databases(0)

    db.QueryDefs.Refresh
    For i = db.QueryDefs.Count - 1 To 0 Step -1
        ' MsgBox db.QueryDefs(i).Name

        Application.SetHiddenAttribute acQuery, db.QueryDefs(i).Name, False
        'MsgBox db.QueryDefs(i).Name
    Next i
    Set db = Nothing
    'MsgBox "当前数据库中的所有查询都已显示!", vbInformation, "系统提示"

Exit_XianShiChaXun:
    Exit Function

Err_XianShiChaXun:
    'MsgBox Err.Description
    Resume Exit_XianShiChaXun

End Function


Public Function YinCangChaXun()
    On Error GoTo Err_YinCangChaXun
    '======================================================================================
    '隐藏系统中所有的查询,以确保不会被非法链接,
    'DoCmd.SetWarnings 0     '关闭系统提示

    Dim db As Database
    Dim i As Integer
    Set db = DBEngine.Workspaces(0).Databases(0)

    db.QueryDefs.Refresh
    For i = db.QueryDefs.Count - 1 To 0 Step -1
        ' MsgBox db.QueryDefs(i).Name
        Application.SetHiddenAttribute acQuery, db.QueryDefs(i).Name, True
        'MsgBox db.QueryDefs(i).Name
    Next i
    Set db = Nothing

Exit_YinCangChaXun:
    Exit Function

Err_YinCangChaXun:
    'MsgBox Err.Description
    Resume Exit_YinCangChaXun

End Function
作者: leonshi    时间: 2013-12-7 21:28
版主说的彻底隐藏,你这个好像不是啊
作者: ycxchen    时间: 2013-12-8 08:43
netguestcn 发表于 2013-12-7 21:05
Public Function XianShiChaXun()
    On Error GoTo Err_XianShiChaXun
    '========================= ...

谢谢!这个不能彻底隐藏查询的。
作者: roych    时间: 2013-12-8 15:24
本帖最后由 roych 于 2013-12-8 15:26 编辑

一般不是用Attribute属性吗?详见http://www.office-cn.net/portal.php?mod=view&aid=233&page=1&记得之前跟一个老前辈的论战中就提出过这个问题,没法彻底隐藏的,设置Attribute属性为True就可以找到了。

作者: ycxchen    时间: 2013-12-9 09:57
roych 发表于 2013-12-8 15:24
一般不是用Attribute属性吗?详见http://www.office-cn.net/portal.php?mod=view&aid=233&page=1&记得之前 ...

谢版主,目前,确无必要讨论此问题了。
作者: aslxt    时间: 2013-12-10 23:00
查询不是很复杂的情况,就用代码处理,然后编译。
作者: ycxchen    时间: 2013-12-11 16:46
aslxt 发表于 2013-12-10 23:00
查询不是很复杂的情况,就用代码处理,然后编译。

哦,我说的是能不能彻底隐藏查询。
作者: aslxt    时间: 2013-12-12 22:24
ycxchen 发表于 2013-12-11 16:46
哦,我说的是能不能彻底隐藏查询。

就是把查询的语法存放在代码中,数据库对象中就看不到该查询对象
作者: ycxchen    时间: 2013-12-14 10:17
aslxt 发表于 2013-12-12 22:24
就是把查询的语法存放在代码中,数据库对象中就看不到该查询对象

谢谢!生成SQL语句,明白。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3