Excel与SQL Server进行通信以识别用户。
Excel查询SQL Server。 尝试使用当前用户名进行查询。 我有一个Excel文件查询SQL Server中的视图。 该视图设置为基于用户查询视图返回结果。
我在networking服务器上设置了一个文件供他人访问,希望当他们打开文件时,它只会显示与他们有关的信息。
但是这些信息还只是指自己。 我想让它显示用户使用该文件的信息,就像直接查询视图一样。
以下是该视图的示例查询:
Select * from dbo.WorkEstimate where Estimator = SUSER_NAME()
但是Excel表格只返回与我自己有关的信息。 我认为这可能与总是指定我的工作站名称的connectstring
string有关。 有没有办法改变,以反映个人(或他们的工作站)使用该文件?
SQL语句中的SUSER_NAME()
(transact-sql)引用当前正在执行的SQL语句的上下文中的当前用户。 在你的情况下,它是你在连接string中指定的用户标识。 sql服务器使用连接SUSER_NAME()
指定的用户来运行该语句,因此您的SUSER_NAME()
反映该用户。
您需要使用以下Excel函数来指定Excel(Windows环境下)正在运行的用户:
-
Application.Username
是用户在Excel工具>选项(在用户名框下)中设置的名称, -
Environ("Username")
是您为Windows注册的名称,请参阅控制面板>系统
所以,你的SQL语句必须是这样的:
vsSQL = "SELECT * FROM dbo.WorkEstimate WHERE (Estimator = '" & Environ("Username") & "');"
希望这可以帮助。
您不需要使用Excel与SQL Server进行通信就可以知道这一点。 Excel需要与用户的机器进行通信。
使用此代码来发现与login到计算机的用户有关的所有环境variables。 仔细查看结果,找出需要传递给查询的内容。
将模块添加到您的Excel文件并粘贴到以下内容中:
Sub ListAllEnvironmentVariables() Dim ws As Worksheet Dim rng As Range Set ws = Sheets("Sheet1") Set rng = ws.Range("A1") Dim i As Integer i = 1 Do Until Environ$(i) = "" rng.Offset(i - 1).Value = Environ(i) i = i + 1 Loop End Sub
我在示例中使用了Sheet1
,但是可以更改它并将ws
设置为工作簿中的任何空白工作表,以查看它是如何工作的。 如果表单上有数据,显然不要使用Sheet1
。