1

ExcelはSQLServerにクエリを実行します。現在のユーザー名を使用してクエリを実行しようとしています。SQLServerのビューを照会するExcelファイルがあります。ビューは、ビューをクエリしているユーザーに基づいて結果を返すように設定されています。

他の人がアクセスできるようにネットワークサーバー上にファイルを設定し、ファイルを開いたときに、自分に関連する情報のみが表示されることを期待しています。

しかし、情報はまだ私自身を参照しているだけです。ユーザーがビューを直接クエリしているかのように、ファイルを使用しているユーザーに情報を表示したいと思います。

ビューのサンプルクエリは次のとおりです。

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

ただし、Excelシートには、自分に関連する情報しか返されません。connectstringいつも私のワークステーション名を指定しているのと関係があるのではないかと思います。ファイルを使用している個人(またはそのワークステーション)を反映するように変更する方法はありますか?

4

2 に答える 2

3

SQL ステートメントのSUSER_NAME()(transact-sql) は、現在実行中の SQL ステートメントのコンテキスト内の現在のユーザーを参照します。あなたの場合、接続文字列で指定したユーザーIDです。SQLサーバーは、接続文字列で指定されたそのユーザーを使用してそのステートメントを実行し、SUSER_NAME()そのユーザーを反映します。

次の Excel 関数を使用して、Excel を実行しているユーザー (Windows 環境) を指定する必要があります。

  • Application.UsernameExcel の [ツール] > [オプション] ([ユーザー名] ボックスの下) で設定されたユーザーの名前です。
  • Environ("Username")は、Windows に登録した名前です。[コントロール パネル] > [システム] を参照してください。

したがって、SQL ステートメントは次のようにする必要があります。

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

お役に立てれば。

于 2013-02-23T04:21:01.587 に答える
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シートにデータがある場合は、明らかに使用しないでください。

于 2013-02-23T04:28:47.550 に答える