【发布时间】:2019-04-18 09:59:37
【问题描述】:
我有一个 MS Access 数据库,它通过链接服务器连接到 SQL 服务器。
链接表是使用修改后的AttachDSNLessTable 过程添加的:
stConnect = "ODBC;DRIVER=" & stDriverName & ";SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
Set td = CurrentDb.CreateTableDef(stLocalTableName)
td.SourceTableName = stRemoteTableName
td.Connect = stConnect
CurrentDb.TableDefs.Append td
我在应用程序中有一个工具可以更改登录用户,这将删除所有 tabledef:
For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next
然后它会使用上面的过程重新添加。
现在这似乎可以工作,但是如果我以user1 登录然后将用户更改为user2 而不关闭访问,则使用user1 凭据建立连接,运行包含SUSER_NAME() 的视图显示user1是登录用户。
有没有办法强制重置连接或强制更改用户?
编辑
我的整个登录功能:
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stDriverName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)
On Error GoTo AttachDSNLessTable_Err
Dim td As TableDef
Dim stConnect As String
For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
Exit For
End If
Next
If Len(stUsername) = 0 Then
'//Use trusted authentication if stUsername is not supplied.
stConnect = "ODBC;DRIVER=" & stDriverName & ";SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
Else
'//WARNING: This will save the username and the password with the linked table information.
stConnect = "ODBC;DRIVER=" & stDriverName & ";SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
End If
Set td = CurrentDb.CreateTableDef(stLocalTableName)
td.SourceTableName = stRemoteTableName
td.Connect = stConnect
CurrentDb.TableDefs.Append td
AttachDSNLessTable = ""
Exit Function
AttachDSNLessTable_Err:
AttachDSNLessTable = err.Description
End Function
【问题讨论】:
-
@AndyG 导航面板上有一个“更改用户”选项,这会重新打开登录表单。当用户登录时,它使用第二个代码块删除 tabledef 对象并使用新的用户/密码重新添加它们,但它实际上是使用原始用户/密码打开连接。
-
另外,一般用户可以使用这个功能吗?他们应该能够在不先退出的情况下切换用户名吗?
-
@AndyG 是的,它适用于任何用户。
-
Access 不适合这个,但是,在我看来,您的一般用户 / Joe 不应该能够在不退出 Access 的情况下切换用户。否则,如前所述,在更改用户的过程中可以重置连接。
-
@AndyG 我同意,Access 不合适,但无法更改。你知道如何重置连接吗?
标签: sql-server vba ms-access azure-sql-database