2013-02-23 38 views
1

Excel查詢SQL Server。嘗試使用當前用戶名進行查詢。我有一個Excel文件查詢SQL Server中的視圖。該視圖設置爲基於用戶查詢視圖返回結果。Excel與SQL Server進行通信以識別用戶。

我在網絡服務器上設置了一個文件供他人訪問,希望當他們打開文件時,它只會顯示與它們有關的信息。

但信息仍然只是指我自己。我希望它能夠顯示用戶使用該文件的信息,就好像他們直接查詢視圖一樣。

下面是該視圖的查詢示例:

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

但Excel工作表中只返回有關自己的信息。我認爲這可能與connectstring總是指定我的工作站名稱有關。有沒有辦法改變這個以反映使用該文件的個人(或他們的工作站)?

+0

Excel如何獲取當前用戶?你確定它不只是使用用戶帳戶創建Excel文件的人嗎? – 2013-02-23 03:48:29

+0

什麼是連接字符串。你正在拋棄回答你的問題所需的唯一信息。 – JohnFx 2013-02-23 04:59:20

回答

3

SQL語句中的SUSER_NAME()(transact-sql)引用當前正在執行的SQL語句的上下文中的當前用戶。就你而言,它是你在連接字符串中指定的用戶標識。 sql服務器使用連接字符串中指定的用戶來運行該語句,因此您的用戶反映的是該用戶。

您需要指定Excel的是(Windows環境)下具有以下Excel函數運行的用戶:

  • Application.Username是Excel工具>選項設置的用戶名(用戶下名稱框)
  • Environ("Username")是您註冊爲Windows看到控制面板的名稱>系統

所以,你的SQL語句將有必須是這樣的:

vsSQL = "SELECT * FROM dbo.WorkEstimate WHERE (Estimator = '" & Environ("Username") & "');" 

希望這會有所幫助。

0

您不需要使用Excel與SQL Server進行通信來弄清楚。 Excel需要與用戶的機器進行通信。

使用此代碼可發現與登錄到計算機的用戶有關的所有環境變量。查看結果以找出需要傳遞給查詢的內容。

添加一個模塊,您的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

+0

這第二個答案似乎運作最好。讓Excel與用戶的機器進行交流看起來有訣竅。感謝大家的意見。 – user2101538 2013-03-18 22:20:17

相關問題