Select a from 表 Where (A and 2)<>0 

解决方案 »

  1.   

    select * from 表 where a & 12=12
      

  2.   

    看错了,原来是问ACCESS数据库的问题.
      

  3.   

    A and 2 在VB中有效,在ACCESS中是无效的
      

  4.   

    '解决的方法是在模块中新建一个模块,写上下面的函数Public Function f_bit(ByVal a&, ByVal b&, pro$)
        Select Case pro
            Case "or", "|"
                f_bit = a Or b
            Case "and", "&"
                f_bit = a And b
            Case "xor", "^"
                f_bit = a Xor b
        End Select
    End Function
      

  5.   

    '然后就可以在视图中调用这个函数来实现位运算Select a from 表 Where f_bit(A,2,"&")=2
      

  6.   

    使用 按位AND运算主要是要提高效率
    使用外部函数是否降低了效率?这样比用 Like 来模拟 是否效率更低实际问题就是要解决  找出某内容在某序列(有限序列) 中的存在记录
    需要一种效率较高的查找方法 并且兼容于 SQLSERVER 和 ACCESS
      

  7.   

    兼容就意味着要降底效率如果你要提高效率,就必须用一些数据库特有的东西.至于用外部函数与like的效率问题,这个要通过测试才知道
      

  8.   

    讨论以下得到 判断某数据表中数据记录的 是否包含但前用户  的最佳效率 的设计方法
    如: 在 一个产品资料列表 中  有一个字段 CheckOut 用来记录 可以记录每个记录的可操作用户
    列表,目前有2种设计方法,(用户数为有限序列,并且不大于24 个)方法1: 用Like ,用A,B,C....单字母来代表每个用户ID, 产品表中 建立 CheckOut VarChar(50),不设置索引(因为索引无效)某条数据 可操作用户序列 为 checkout=',A,B,D,'  (,分割每个用户)
    要查找 A 用户可以操作的数据 则用  Select * from 产品 Where CheckOut Like '%,A,%'方法2: 改用按位AND运算 用户ID 用整数序列 如:  1,2,4,8,16,32,64.......
    产品表中 建立 CheckOut Int  设置索引
    checkout = 1+2+4要查找 1 用户可以操作的数据 则用 Select * from 产品 Where (Checkout & 1)<>0实验证明 方法2效率最高,但是该方法不能兼容 Access (主要是Access 无位AND运算) ,而方法1 效率太低. 是否有其他方法来实现该目的.另外问一下  1,2,4,8,16,32.... 这种数叫什么序列,有没有学术名称      
      

  9.   

    补充:
    软件用VB + ADO+  Access/SQLServer  来实现,该方法必须同时可以在Access/SQLserver 中使用
      

  10.   

    这种问题如果用&操作的话有问题的,SQL SERVER的bigint最大好象64位,如过超过64个无法表示了
      

  11.   

    用位操作看来应该是不行的了,即使ACCESS支持位操作,还要表示方法与SQL一样,才具有通用性.如果要自己写算法,要保证在两套系统上都能行得通,还要考虑效率.
      

  12.   

    --还是换种思路吧,增加一个表,来记录权限分配情况,这样就兼顾了效率和通用性的问题.示例:
    权限分配表
    记录编号   操作员编号
    1          1
    1          2
    1          4
    2          2
    --查询某个操作员(例如2号操作员)可以操作的记录,就可以用:
    select * from 记录表 as a 
    where exists(select 1 from 权限分配表 where 操作员编号=2 and 记录编号=a.记录编号)--或者这样查询:
    select a.* from 记录表 as a 
        inner join 权限分配表 as b on a.记录编号=b.记录编号 and b.操作员编号=2
      

  13.   

    上述两种方法都可以利用索引来加速,所以效率上应该是没有问题的
    而且上述语句,在ACCESS和SQL中都是被支持的.当然,维护这个权限分配表可能要比维护一个字段要麻烦一点.
      

  14.   

    zjcxc 这样作会不会数据膨胀,权限表需要记录   N用户 *  N记录 条数据虽然用户是有限的,但记录是无限的
    还有没有其他更好的方法?
      

  15.   

    应该是没有更好的方法了.至于数据膨胀的问题,这个不用担心,SQL Server对记录没有限制,几百万条数据也是常事.至于ACCESS数据库,数据量大时,处理什么正常数据都不行啦,不要说权限分配的记录.