我有一个MS Access数据库,它通过用户级DNS ODBC数据源连接到另一个数据库。
首次启动连接时,ODBC驱动程序将提示我输入用户名和密码。然后它在服务器上连接的数据库取决于我使用的用户名。
建立连接后,Access将保持/保持活动状态,直到我关闭Access数据库。
有没有办法强制Access关闭所有打开的ODBC连接,要求我在下次尝试访问服务器上的对象时再次提供登录凭据。我想要做的是切换ODBC连接访问哪个数据库,而不必完全关闭Access并重新打开数据库。
答案 0 :(得分:1)
两件事:
1)您可以通过以下方式使用户尽可能轻松地关闭和重新打开Access的过程:
' Close and restart
Shell "restart.bat", vbNormalFocus
Application.Quit
使用restart.bat包含类似
的内容REM wait for Access to close
TIMEOUT 3
REM your actual command line goes here
msaccess.exe mydatabase.mdb
2)你提到:
我想要做的是切换ODBC的数据库 连接正在访问
您发布的链接给了我一个想法:
任何后续的ODBC对象碰巧匹配三个 参数 - ODBC驱动程序,服务器和数据库 - 将重用该缓存 连接。
如果您将链接表从用户DSN切换到无DSN连接,则应自动执行所需的行为 只需通过更改“Database = ...”部分来更改所有表的.Connect字符串,Access就会在下次访问表时请求凭据。
答案 1 :(得分:0)
哦,链接表。我不认为这是可能的。
您可以尝试重置连接信息,但我怀疑它会起作用:
Dim TD As TableDef
For Each TD In DB.TableDefs
' Linked table? You can also check the .Connect string more specifically for KB_SQL
If TD.Connect <> "" Then
TD.Connect = TD.Connect
TD.RefreshLink
End If
Next TD
可能实际工作的更激进的方法是删除表链接并重新添加它们。
Dim TD As TableDef
Dim sConn As String, sName As String
For Each TD In DB.TableDefs
If TD.Connect <> "" Then
sName = TD.Name
sConn = TD.Connect
' Remove linked table
DB.TableDefs.Delete sName
' and add it as new link
DoCmd.TransferDatabase acLink, "ODBC Database", sConn, acTable, sName, sName
End If
Next TD
您可能需要一种不同于For Each的循环,因为您正在循环中修改DB.TableDefs集合。