none
Access2007 没法打开2003版本编写的含用户级安全机制的数据库文件 RRS feed

  • 问题

  • 我在工作中用Access2003编写了一个小数据库,运用了用户级安全机制,所有用户打开时必须确认用户名、密码。现在有用户系统从WinXP更新到Win7,office从2003升级到2007。按道理Access2007能直接打开低版本的数据库,且安全机制等设置都不变,但该用户就是打不开,提示是没有权限,事实上他在2003版本中一切正常,文件设置也没更改过,请问是什么原因?谢谢!
    2012年9月14日 7:01

答案

  • Hi,

    立即窗口中运行 VisualBasic 代码:

    1.

    Access 2007, 打开信任数据库, 或启用现有数据库中宏。

    2.

    CTRL+G 以打开立即窗口。

    3.

    键入下面一行代码, 然后按 Enter

    DoCmd.RunCommand   acCmdWorkgroupAdministrator

    4.

    工作组管理员 对话框中, 单击 【加入】 , 并单击 【浏览】。

    5.

    找到并然后单击下列文件, 并单击 打开

    默认位置:C:\ProgramFiles\Common Files   Files\system\System.mdw

    选择自己的mdw文件

    6.

    工作组管理员 对话框中, 确定 , 依次 退出


    Jaynet Zhang

    TechNet Community Support

    2012年9月17日 8:49
    版主

全部回复

  • Hi,

    Access 2007 仅为在 Access 2003 和更低版本的 Access 中创建的数据库(.mdb .mde 文件)提供用户级安全机制。在 Access 2007 中,如果您打开一个在较低版本的 Access 中创建的数据库,并且该数据库应用了用户级安全机制,那么该安全功能对该数据库仍然有效。例如,用户必须输入密码才能使用该数据库。

    另外,您还可以启动和运行 Access 2003 和更低版本的 Access 提供的各种安全工具,如用户级安全机制向导和各种用户和组权限对话框。在操作过程中,请记住只有打开 .mdb .mde 文件时这些工具才可用。如果将文件转换为 Office Access 2007 文件格式,那么 Access 会删除现有的所有安全功能。

    我认为你是将Access 2003直接转换为了Access 2007了,所以就会出现这样的问题。

    具体内容,可以查看以下链接:

    http://office.microsoft.com/zh-cn/access-help/set-or-change-access-2003-user-level-security-in-access-2007-HA010166227.aspx


    Jaynet Zhang

    TechNet Community Support

    2012年9月17日 3:09
    版主
  • 谢谢你的回复,但我肯定没有将Access 2003转化为2007,因为,该2003数据库文件在公共共享盘上, 其Office2003 用户都正常打开使用。现在的问题聚焦在2003版文件伴有一个Security.mdw 文件,.mdb文件使用时必须正确连接到该.mdw文件上, 否则系统将提示没有必要的权限。2003版中在工具栏Tool--Security--workgroup Administrator打开连接对话框,找到该.mdw文件后连接即可正常打开, 但该功能在2007版中找不到,如何实现该连接功能?

    2012年9月17日 6:09
  • Hi,

    立即窗口中运行 VisualBasic 代码:

    1.

    Access 2007, 打开信任数据库, 或启用现有数据库中宏。

    2.

    CTRL+G 以打开立即窗口。

    3.

    键入下面一行代码, 然后按 Enter

    DoCmd.RunCommand   acCmdWorkgroupAdministrator

    4.

    工作组管理员 对话框中, 单击 【加入】 , 并单击 【浏览】。

    5.

    找到并然后单击下列文件, 并单击 打开

    默认位置:C:\ProgramFiles\Common Files   Files\system\System.mdw

    选择自己的mdw文件

    6.

    工作组管理员 对话框中, 确定 , 依次 退出


    Jaynet Zhang

    TechNet Community Support

    2012年9月17日 8:49
    版主
  • Hi,Jaynet,

    已解决,十分感谢!

    在该数据库代码中,原来有一段如下的代码,原理是在表City中查找到距离与时间字段,然后在deliveryrate表中,查找到特定货代(CNPL)与运输方式(SemiFTL)在该距离段下2吨车的费率及最低收费,最后用2 吨车的数量*费率*距离得出的运费与最低收费比较取大者。

    现在的deliveryrate表有rate1,Rate2,Rate3,Rate4,原理是先查找出发城市与到达城市的城市级别,然后在一张Matrix表中找到价格级别

    请问我如何在原来的基础上修改代码,我是初学者,请不吝赐教,十分感谢!!!

    • city表
    shipfrom City Distance_Km LTLDeliveryhour SemiFTLDeliveryhour FTLDeliveryhour
    苏州         常州    40             24                       12                     3
    苏州         张家港    71             24                    12                     3

    原Deliveryrate表

    Carrier Method Distance_Low_Km Distance_High_Km Weight_Low_Ton Weight_High_Ton Rate Rate_unit in_charg
    CNPL   SemiFTL    0                       199.99                 0                    2                     9.49   CNY/km    350
    CNPL   SemiFTL    0                       199.99                 0                    3                     9.95   CNY/km    400 

         STemp = " SELECT Distance_km, SemiFTLDeliveryHour from City WHERE shipfrom= '" & Me![shipfrom] & "' and City= '" & Me![City] & "'"
        Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        
        If Rs.RecordCount < 1 Then
            MsgBox "No information about this city in the city list, pls check!", vbOKOnly, "Warm notice"
            Exit Sub
        Else
            distance = Rs("Distance_km")
            deliveryhour = Rs("SemiFTLDeliveryHour")
            [ExArriveDate] = DateAdd("h", deliveryhour, [DispatchDate])
        End If
        Rs.Close
        
        'rate for 2t
        If [2t] > 0 Then
            STemp = "Select Rate,Min_Charge_CNY from DeliveryRate WHERE (Carrier='CNPL') AND (Method='SemiFTL') "
            STemp = STemp & "AND (Distance_Low_Km<="
            STemp = STemp & CStr(distance)
            STemp = STemp & ") AND (Distance_High_Km>= "
            STemp = STemp & CStr(distance)
            STemp = STemp & ") AND (Weight_High_Ton=2)"
            Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
            
            cost2t = [2t] * distance * Rs("rate")
            If cost2t < [2t] * Rs("Min_Charge_CNY") Then
                cost2t = [2t] * Rs("Min_Charge_CNY")
            End If
            
            Rs.Close
        End If
    2012年9月18日 2:09
  • Hi,

    因为这个关系到另外的问题,麻烦你重新到论坛上发一个帖子,我们会尽力帮你解决问题的。


    Jaynet Zhang

    TechNet Community Support

    2012年9月18日 9:07
    版主