【问题标题】:Clearing Access Cache清除访问缓存
【发布时间】:2016-08-21 10:36:25
【问题描述】:

我正在开发一个与 Sql Server 后端对话的 Access 系统。我可以连接两个单独的帐户 A 和 B,以便我可以控制权限。特别是我有一个视图,它是通过传递查询访问的,该查询被 A 拒绝但被 B 允许。

通常选择 A 或 B 作为登录名与用户所属的访问安全组有关,但我已对其进行了设置,以便管理员组中的人(即我)从内部访问表中读取登录名。我还创建了一个表单(和相关代码),允许管理员更改此值。

这一切都很好并且完美地完成了它的工作 - 如果我从头开始启动 Access

它检测到我是管理员,读取我在内部表中设置的最后一个值,使用正确的登录字符串连接到服务器(我使用这个新的连接字符串循环删除并重新创建所有 tabledef),然后显示我的第一种形式。我导航到一个运行传递查询的按钮。当我单击该按钮时,它会重新创建传递查询,方法是删除具有相同名称的查询并使用正确的连接字符串(A 或 B 登录名)重新创建它,然后再运行它以输出结果。如果我是 A,那么它会失败并出现权限错误(我会显示并通知用户),如果我是 B,它会工作并且我会得到结果。

我添加了一个系统来尝试动态更改此设置以进行测试。更改了管理员应该登录的身份(通过写入内部表)后,它会调用启动代码,该代码会循环删除和重新创建 tabledef,然后让我回到初始表单。

但是 - 如果我现在导航到运行权限控制查询的按钮,它仍然会从头开始删除并重新创建查询 def,但是当我运行它时,它似乎在 SQL Server 登录的上下文中运行它是在我第一次开始访问时设置的,而不是我刚刚重新创建所有内容的新 SQL Server 登录名。所以查询会在不应该运行的时候运行(反之亦然)。

如果我退出 Access 并重试 - 它会再次开始正常工作。

我可以从中得出的唯一结论是,在 Access 内部的某个地方,它正在缓存 ODBC 连接字符串 - 而不是使用新的,而是使用旧的。

所以我的问题是 - 我的结论是否正确,如果是,我如何告诉 Access 清除其缓存。

我在 Access 2010 中开发 - 最终将在 Access 2000 环境中运行的系统 - 所以文件格式是 Access 2000 格式的 .mdb。

【问题讨论】:

标签: sql-server ms-access


【解决方案1】:

我来到这个话题是因为我有同样的问题:“如何清除 Access 2010 中的缓存?”

就我而言,问题在于我的应用程序以某种方式“记住”了链接照片的整个路径,即使我只引用了文件名。上面的链接之一引导我在“文件 > 当前数据库 > 缓存 Web 服务和 SharePoint 表”下进行搜索。 “使用与 MS Access 2010 兼容的缓存格式”选项已被选中,但我启用了“关闭时清除缓存”复选框并关闭了数据库。

瞧!所有以前缓存的值,包括我的链接照片的值,都被清除了。此设置似乎不会影响我的 ODBC DNS-less 连接,但我尚未确认。

**要清除缓存,转到文件-->**选项-->当前数据库,然后向下滚动到缓存 Web 服务和 SharePoint 表。****

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      据我所知,没有办法清除这个缓存。如果您执行查询并为该查询提供不同的 UID/密码,那么您从该操作获得的权限将一直有效,直到您关闭 Access。

      因此,如果您执行另一个查询并提供“不同”的 UID/密码,然后自己执行另一个具有“较低”权限的查询,则将使用另一个缓存的 UID/密码。因此,您可以(并且将会)在此时缓存多个 UID/密码 - 您无法控制使用哪个。

      解决此问题的唯一方法是采用单独的 ADO 查询 - 据我所知,这不会像使用 DAO 查询时那样缓存凭据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        相关资源
        最近更新 更多