Excel与SQL Server进行通信以识别用户。

Excel查询SQL Server。 尝试使用当前用户名进行查询。 我有一个Excel文件查询SQL Server中的视图。 该视图设置为基于用户查询视图返回结果。

我在networking服务器上设置了一个文件供他人访问,希望当他们打开文件时,它只会显示与他们有关的信息。

但是这些信息还只是指自己。 我想让它显示用户使用该文件的信息,就像直接查询视图一样。

以下是该视图的示例查询:

Select * from dbo.WorkEstimate where Estimator = SUSER_NAME() 

但是Excel表格只返回与我自己有关的信息。 我认为这可能与总是指定我的工作站名称的connectstringstring有关。 有没有办法改变,以反映个人(或他们的工作站)使用该文件?

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