2016-11-30 6 views
0

この構文を使用してExcel 2013からSQL Server 2008ストアドプロシージャを実行しています。すべてが1台のPC上で実行されるように実行されますが、2台目のPCで実行すると、SQLクエリをVBAから実行

OLEDB接続エラー

私は任意のPC上でのOAヒッチ/ wのサーバー名、ユーザー名、およびパスワード構文の実行をハードコーディングしていますので、べきではないのですか?

Function RunSQLServerProc() 
Dim con As ADODB.Connection 
Dim cmd As ADODB.Command 
Dim rs As ADODB.Recordset 
Set con = New ADODB.Connection 
Set cmd = New ADODB.Command 
Set rs = New ADODB.Recordset 
con.Open "Provider=SQLOLEDB;Data Source=Server;Initial Catalog=Database;User Id=userid;Password=password;Integrated Security=SSPI;Trusted_Connection=Yes;" 
cmd.ActiveConnection = con 
cmd.CommandText = "TestProc" 
Set rs = cmd.Execute(, , adCmdStoredProc) 
End Function 
+1

これは実際に実行されますか?私はあなたがコマンドへの接続をどこに割り当てているのか分かりません。また、ユーザIDとパスワードを 'Integrated Security = SSPI'で提供することは矛盾しています。確かにそれはエラーメッセージ全体ではありません。 –

+0

@PaulAbbott - 申し訳ありませんが、コピー/貼り付けエラーです。私はcmd.ActiveConnection = con ....で追加しました。私は、ワークブックを開くユーザーがSQL Serverへの接続を実行できるようにしたいと思っています。それに関係なく、コンピュータは開かれています。 –

+0

SQLユーザー名とパスワードまたは現在のWindowsログインで認証しようとしていますか? –

答えて

0

VBA
1)統合セキュリティ= SSPIを使用してSQL Serverに接続するには2つの方法があります。
2)

にVBAを通じて有効なユーザ名&パスワードを入力し、あなたがSSPIを使用する場合、すなわち、Excelワークブックのログインしているユーザーの資格情報()ログインウィンドウが使用されます。

Windowsの資格情報を使用したくないので、指定したユーザーIDとパスワードでSQLサーバーログオンを提供する必要があります。また、データベース内のアカウントに関連付ける必要がありますあなたが必要です。

0

これらの2つのサンプルは、私にとって完璧に機能します。

Option Explicit 

Sub CallSprocOne() 

Dim con As Connection 
Dim rst As Recordset 
Dim strConn As String 

Set con = New Connection 
strConn = "Provider=SQLOLEDB;" 
strConn = strConn & "Data Source=LAPTOP\SQL_EXPRESS;" 
strConn = strConn & "Initial Catalog=Northwind;" 
strConn = strConn & "Integrated Security=SSPI;" 

con.Open strConn 

'Put a country name in Cell E1 
Set rst = con.Execute("Exec dbo.TestNewProc '" & ActiveSheet.Range("E1").Text & "'") 

'The total count of records is returned to Cell A5 
ActiveSheet.Range("A5").CopyFromRecordset rst 

rst.Close 
con.Close 

End Sub 


Sub CallSprocTwo() 

Dim con As Connection 
Dim rst As Recordset 

Set con = New Connection 
con.Open "Provider=SQLOLEDB;Data Source=LAPTOP\SQL_EXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI;" 

Set rst = con.Execute("Exec dbo.[Ten Most Expensive Products]") 
'Results of SProc are returned to Cell A1 
ActiveSheet.Range("A1").CopyFromRecordset rst 

rst.Close 
con.Close 
End Sub 
関連する問題