标题:请教版主
只看楼主
peacock
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2004-4-21
 问题点数:0 回复次数:13 
请教版主

所有变量均设置好了的

For Each td In db.TableDefs If (td.Attributes And dbSystemObject) = 0 Then '甩掉系统表 If (td.Attributes <> dbAttachedTable) Then '甩掉附属表 lstTDName.AddItem td.Name '用户表进入列表框 End If End If Next

为何td.Attributes And dbSystemObject用and 我用监视调试,开始时(td.Attributes And dbSystemObject) 的值为2,and 产生的结过不是只有true/false/1/0吗?后来就变成0了。dbSystemObject不是一常量吗。只用td.Attributes =0不就行了吗???为何要用(td.Attributes And dbSystemObject) = 0

这是一本书上的例子。能运行没错。

搜索更多相关主题的帖子: 版主 Attributes And 变量 Then 
2004-04-28 16:09
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
得分:0 
是这样没错,加上dbSystemObject或会使的逻辑更加清晰。

I am a big fan of c plus plus.
2004-04-28 23:00
peacock
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2004-4-21
得分:0 

每一个表不是只有一个Attributes 值吗???

and 不是逻辑与吗?dbSystemObject是一常量没错吧?


学海无崖,但不是苦做舟,编程是一件多么有乐趣的事,怎会苦呢??? 让我们一起在这个世界里尽情的玩吧!!!
2004-04-29 08:48
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
得分:0 

用(td.Attributes And dbSystemObject)可以使代码更易读,比如我很久没用DAO了,只看到td.Attributes =0 我可能不知道这是要判断什么,需要查阅帮助之类,而(td.Attributes And dbSystemObject)我就知道这是在判断td是不是系统对象(也就是系统表)。

And在这里不是用作条件判断,而是用来做“逻辑与”运算,“逻辑与”运算的结果视两个操作数而定,当然不止是1或0。你在VB的立即窗口验证一下就知道了,比如4 and 4=4


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-04-29 09:06
peacock
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2004-4-21
得分:0 

他这里的and 是按位与的?

即把4变成100(B)来与的吗?4and 5=5 4(d)=100(b),5(d)=101(b),所以4and5=101(b).既为十进制中的5

这样我就明白了,不然还是不明白。


学海无崖,但不是苦做舟,编程是一件多么有乐趣的事,怎会苦呢??? 让我们一起在这个世界里尽情的玩吧!!!
2004-04-29 10:06
peacock
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2004-4-21
得分:0 

那他为何不用

td.Attributes <> dbSystemObject

这不是更好懂吗?


学海无崖,但不是苦做舟,编程是一件多么有乐趣的事,怎会苦呢??? 让我们一起在这个世界里尽情的玩吧!!!
2004-04-29 11:33
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
得分:0 
以下是引用peacock在2004-04-29 10:06:33的发言:

他这里的and 是按位与的?

即把4变成100(B)来与的吗?4and 5=5 4(d)=100(b),5(d)=101(b),所以4and5=101(b).既为十进制中的5

这样我就明白了,不然还是不明白。

不错。

为什么不使用td.Attributes <>dbSystemObject?

你在立即窗口查看一下dbSystemObject的值就明白了,更具体的我也不知道。很久没用DAO了,你可看看相关的帮助对dbSystemObject的解释,应该能明白的。

大多数开发语言都会内置一些常量,用来做某些判断时的掩码。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-04-29 11:50
peacock
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2004-4-21
得分:0 

“大多数开发语言都会内置一些常量,用来做某些判断时的掩码。”

是不是说如果想知道某个变量是多少可以叫它与系统定义的常量向与。与出的结果是零就表示变量的值不是这个常量?

那如果该常量就为零呢?

for instance:

dbAttachExclusive(其值为0)

if (td.Attributes And dbSystemObject) = 0 then

不就是永远是零了。别人不知道这个常量还以为这是排除 td.Attributes = dbSystemObject的情况呢??

td.Attributes <>dbSystemObject 用这个不是更好懂??????????


学海无崖,但不是苦做舟,编程是一件多么有乐趣的事,怎会苦呢??? 让我们一起在这个世界里尽情的玩吧!!!
2004-04-29 14:16
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
得分:0 

实际上dbsystemobject就是一个位掩码,你有兴趣深究的话,不妨把dbsystemobject转成二进制数,再把tabledef的每个可能的attributes和它进行and运算,对比一下结果,再慢慢体会吧。

所谓位掩码,就是用它来判断另一个数的某位是否为0/1。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-04-29 15:33
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
得分:0 

补充一下:

可能是我这句话给你造成误解“而(td.Attributes And dbSystemObject)我就知道这是在判断td是不是系统对象(也就是系统表)。”

我的意思是如果(td.Attributes And dbSystemObject)=0就是系统表。

为什么不直接使用td.Attributes =0来判断是否系统表?

Attributes有可能是多个属性之和,也就是说,Attributes<>0时也可能是系统表,对它的判断不是简单地看它的值是多少,而是看它的某一位(bit)是多少。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-04-29 15:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-955-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053258 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved