Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

DAO(ADO)声明变量问题

小陈  发表于:2013-12-10 11:09:11  
复制

以下是红尘片版主有关隐藏表的代码:

CurrentDb.TableDefs("表2").Attributes = dbHiddenObject

    Application.RefreshDatabaseWindow

请问:为何不用用类似Dim obj As AccessObject, dbs As Object等语句来声明变量的?

 

Top
cspa 发表于:2013-12-10 11:43:12

你自己定义的变量需要先声明access才认识,你说的这些是access定义的系统变量和属性,不用你声明access也认识,你只管用就是了。

就像几个孩子在一起玩,你家的孩子不用告诉你名字你也认识,但别人家的孩子就必须先告诉你他叫什么你才认识。



小陈 发表于:2013-12-10 11:58:22
谢谢cspa!还是不明,代码中的“表2”本身是变量了,为何不用声明的?最好能详细解释,行吗?

cspa 发表于:2013-12-10 14:09:15
“表2”是你已定义好的表,access自然也认识,只有你在代码中需用到的新变量才需定义。

小陈 发表于:2013-12-10 15:15:09

如下代码中,“员工表”也是定义好的表,为何还要声明变量的?本代码来自网络。

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("Jet OLEDB:Table Hidden In Access") = True
Next

End Sub

盼大家指教。




cspa 发表于:2013-12-10 16:23:35

在这段代码中,你定义的不是"员工表",而是tbl。

Dim tbl As ADOX.Table 是声明tbl定义为一个ADO表,而"员工表"是tbl的一个实例。

For Each tbl In cat.Tables循环是枚举cat.table集合中所有表,并将枚举的每一个表实例化给tbl,通过对tbl的操作达到对每个具体表操作的效果。

就像有三个人,张三、李四、王五是一个士兵集合,我现在定义一个对象叫“士兵”。然后让士兵.张三去开炮,让士兵.李四去打枪,让士兵.王五去开坦克。

士兵.张三就是将定义的士兵对象实例化的一个例子。

奇玉 发表于:2013-12-10 16:50:55
这段代码我本来是看不太明白的,但经cspa这么一举例,我好象明白点了。

小陈 发表于:2013-12-11 11:31:25
cspa的教导通俗易懂,似毛主席的文章般好,难得!再请教:Dim cnn As New ADODB.Connection Dim cat As New ADOX.Catalog作什么用的?此处声明了变量,为何还要Dim tbl As ADOX.Table的?

cspa 发表于:2013-12-11 12:32:26


cspa 发表于:2013-12-11 12:34:05

小陈网友过奖了,折煞我也。毛著到是认真读过的,但万万不可这么比。我说的再好也不如VBA的帮助好。VBA帮助既有解释还有示例,非常全面。以下引自VBA帮助,其实你也可以养成遇到问题先查帮助的习惯,可能可以更便捷地解决你的问题。

Connection 对象

表示到数据源的打开的连接。

说明

Connection 对象表示数据源的唯一会话。在使用客户端/服务器数据库系统的情况下,该对象可以等价于到服务器的实际网络连接。

 

Catalog 对象

包含描述数据源的模式目录的集合(TablesViewsUsersGroupsProcedures)。

说明

可以通过添加或删除对象,或通过修改现有对象来修改 Catalog 对象。有些提供者可能不支持所有 Catalog 对象,或者只支持查看模式信息。

使用 Catalog 对象的属性和方法,可以:

 

 

具体到你的例子就是说:

Dim cnn As New ADODB.Connection     '定义cnn为一个连接
Dim cat As New ADOX.Catalog             '定义cat为一个对象目录集

Set cat.ActiveConnection = CurrentProject.Connection       '设置cat的当前连接为当前数据库项目(将cat实例化)
Dim tbl As ADOX.Table                                                   '定义tbl为一个ADOX表对象
Dim pro As Property                                                      '定义pro为一个属性对象
For Each tbl In cat.Tables                                               '循环枚举每一个cat的表对象,并实例化给tbl
Debug.Print tbl.name                                                     '打印当前tbl所代表的表的名称
For Each pro In tbl.Properties                                          '循环枚举每一个tbl的属性,并实例化给pro
Debug.Print pro.name & "=" & pro.Value                          '打印当前pro属性的名称及属性值
Next                                                                           '结束属性枚举循环
If tbl.name = "员工表" Then tbl.Properties.Item("Jet OLEDB:Table Hidden In Access") = True   '如果表名称为“员工表”,则设置表的属性项(隐藏表)为真。

                                                                                                                                    '即隐藏名称为“员工表”的表
Next                                                                           '结束表枚举循环



小陈 发表于:2013-12-11 16:25:31
衷心感谢cspa的启发式教导!cspa就是高手!

总记录:10篇  页次:1/1 9 1 :