我正在开发一个与Sql Server后端通信的系统。我可以连接两个单独的帐户A和B,以便我可以控制权限。特别是我有一个通过传递查询访问的视图,该查询被拒绝给A但是被B允许。
通常选择A或B作为登录名与用户所属的Access Security组相关,但我已将其设置为管理员组(即我)中的人员从内部访问表中读取登录名。我还创建了一个表单(和相关代码),允许管理员更改此值。
这一切都很有效并且完美地完成了它的工作 - 如果我从头开始使用Access 。
它检测到我是管理员,读取我在内部表中设置的最后一个值,使用正确的登录字符串连接到服务器(我循环删除并使用此新连接字符串重新创建所有tabledef)然后显示我的第一种形式。我导航到一个运行传递查询的按钮。当我单击该按钮时,它会重新创建传递查询,删除具有相同名称的查询并使用正确的连接字符串(A或B登录)重新创建它,然后再运行它以输出结果。如果我是A,那么它会因为权限错误而失败(我会显示并通知用户),如果我是B它可以工作,我会得到结果。
我添加了一个系统,试图动态更改它以进行测试。更改了管理员应该登录的人(通过写入内部表),它会调用启动代码,该代码循环删除并重新创建tabledef,然后将我放回初始状态。
但是 - 如果我现在导航到运行我的权限控制查询的按钮,它仍然会从头删除并重新创建查询def,但是当我运行它时,它似乎在SQL Server登录的上下文中运行它在我第一次开始访问时设置,而不是新的SQL Server登录我刚刚重新创建了所有内容。所以查询将在不应该运行时(反之亦然)。
如果我退出Access并再试一次 - 它会再次开始正常工作。
我可以从中得出的唯一结论是,在Access内部的某处,它正在缓存ODBC连接字符串 - 而不是使用新的连接字符串使用旧的。
所以我的问题是 - 我的结论是否正确,如果是这样,我怎么能告诉Access清除它的缓存。
我正在Access 2010中开发 - 对于最终将在Access 2000环境中运行的系统 - 因此文件格式是Access 2000格式的.mdb。
答案 0 :(得分:2)
我来到这个主题是因为我有同样的问题:“如何清除Access 2010中的缓存?”
在我的情况下,问题是我的应用程序以某种方式“记住”了我链接照片的整个路径,即使我只引用了文件名。上面的链接之一使我在“文件>当前数据库>缓存Web服务和SharePoint表”下搜索。已选中“使用与MS Access 2010兼容的缓存格式”选项,但我启用了“关闭时清除缓存”复选框并关闭了数据库。
瞧!所有先前缓存的值(包括我链接的照片的值)都已清除。这个设置似乎不会影响我的ODBC无DNS连接,但我还没有证实这一点。
**要清除缓存,请转到文件 - > **选项 - >当前数据库,然后向下滚动到缓存Web服务和SharePoint表。****
答案 1 :(得分:1)
答案 2 :(得分:1)
据我所知,没有办法清除这个缓存。如果您执行查询并为该查询提供不同的UID /密码,那么从该行为获取的权限将一直有效,直到您关闭Access为止。
因此,如果你执行另一个查询并提供一个"不同的" UID /密码,然后自己执行另一个具有“较低”权限的查询,将使用另一个缓存的UID /密码。所以你可以(并且将来)在这个时间点缓存多个UID /密码 - 你无法控制使用哪一个。
解决这个问题的唯一方法是采用单独的ADO查询 - 据我所知,这不会像使用DAO查询时那样缓存凭据。