【发布时间】: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。
【问题讨论】:
-
我刚刚看到这篇博文,似乎证实了我关于缓存连接字符串blogs.office.com/b/microsoft-access/archive/2011/04/08/…的结论
标签: sql-server ms-access