根据您的描述,您希望在Access中使用Jet-SQL来实现如下查询:
select * from mytable where (字段1 & 2) =2
在SQL Server (T-SQL)中,我们可以使用 & 位操作符对二进制进行位运算,但是在Jet-SQL中,我们没有这种机制实现以上的查询。另外,如您所说的,在VBA中我们可以利用cbyte函数来返回一个数字数值的二进制值,但是在查询中,我们还是无法使用以下的语句:
select (cbyte(10) and cbyte(10))
因为Jet-SQL不支持这样的用法,所以无论输入值从10更改为其他数字,查询的结果始终返回 -1。
基于我对您问题的理解,我认为 John 的想法是正确的。对于您的题目,我觉得
------------------------- 表: mytable
姓名(str) 状态(byte)
abc 2 abd 1 abb 3 abe 5 abf 4 --------------------------------------
如果四种基本状态分别表示如下:
------------------------------------- 1 2 4 8
健康 工作中 开心 已领供给 ---------------------------------------
然后再使用另外一个状态表来表示这其中的15种状态。例如:
表: status --------------------------------------- 状态(byte) 内容(text) 1 健康 2 工作中 3 健康+工作中 4 开心 5 健康+开心 6 工作中+开心 7 健康+工作中+开心 ...........
---------------------------------------
之后我们可以查询status表来判定 "健康+开心" 所对应的状态值为5,或者也利用两个表之间的连接(诸如以下测试代码),在表mytable中查询出既健康有开心的记录是: abe 5 ----------------------------------------------------- select * from mytable as A inner join status as B on a.状态 = b.状态 where 内容 = '健康+开心' -----------------------------------------------------
留言:v-binyao
Access911.net评论:其实上述方法在 MSGBOX 对话框的参数的应用中可以体现,而且是一种不错的方法。
|