使用Ms Access ...
我正在尝试将从Access连接到SQL Server数据库的用户更改为。我的Access应用程序中的启动表单通过Microsoft KB上发布的例程的Altered版本动态连接到表。在Essence中,它删除与您调用它的名称localName匹配的tabledef,调用Currentdb.CreateTableDef以使用适当的新连接字符串创建一个新的,并将其附加到CurrentDb.TableDefs集合。据我所知,它是实际联系数据库的追加函数,如果连接字符串错误则会抛出错误。
在我的情况下,我对数据库中的所有表进行了原始传递,使用旧的(标准化的 - 即我通常使用此字符串)字符串调用此例程,并且所有表都连接正常。
我正在尝试使用新的用户/密码组合在此启动表单中进行第二次传递,以便测试数据库中的不同权限。
然后我构建了一个新的连接字符串,其中包含修改后的名称和密码,目前正在逐步完成我刚才描述的功能。
我有一个变量td,它包含新创建的tabledef,我只是在将它附加到Currentdb.TableDefs集合之前
在调试器中,“立即”窗口?td.connect
正确地为连接字符串提供新形成的连接字符串,?td.name
给出tblConfig
作为表名。
为了确保TableDef已从当前集合中正确删除,我从即时窗口中?CurrentDb.Tabledefs("tblConfig").Connect
获得了奖励,并获得了一个对话框,表示该集合不包含具有该名称的成员
然后我单步过线
CurrentDb.TableDefs.Append td
现在再次从调试器立即窗口调用?CurrentDb.Tabledefs("tblConfig").Connect
,响应是旧连接字符串而不是新连接字符串。
此例程中有一个OnError处于活动状态,但在单步执行期间未激活。
我能想到的唯一解释是,由于在某个时刻保存了数据库,旧的连接字符串存储在磁盘上,并且当最终追加时,追加不会在连接字符串中复制。 / p>
有没有人有更好的解释?
答案 0 :(得分:2)
事实证明连接字符串确实已缓存
答案 1 :(得分:0)
我的新连接字符串的密码不正确(一个字符错误),并且当问题发生时,访问似乎不会存储新的用户名和密码。
不知何故,尽管使用旧的用户名和密码删除了旧的tabledef,但Access能够将其恢复 - 可能是缓存,我不知道 - 并使用它。显然这是有效的,因此它继续使用该字符串而不是新字符串。
似乎因为旧字符串工作,它没有麻烦抛出错误,所以我现在连接到具有服务器登录的表,该登录没有我预期的相同权限。