2016-11-30 1 views
0

이 구문을 사용하면 Excel 2013에서 SQL Server 2008 저장 프로 시저를 실행할 수 있습니다. 모든 PC는 한대로 실행되지만 두 번째 PC에서 실행하려고하면 오류가 발생합니다. VBA에서 SQL 쿼리 실행

OLEDB 연결 오류

해서는 안 내가 어떤 PC에 서버 이름, 사용자 이름 및 암호 w 구문 실행/OA 히치를 하드 코딩하고 이후?

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

이것은 실제로 실행됩니까? 명령에 연결을 할당하는 위치가 표시되지 않습니다. 또한 'Integrated Security = SSPI'로 사용자 아이디와 패스워드를 제공하는 것은 모순됩니다. 확실히 그것이 전체 오류 메시지는 아닙니다. –

+0

@PaulAbbott - 죄송합니다, 복사/붙여 넣기 오류. cmd.ActiveConnection = con ....에 추가했습니다. 통합 문서를 여는 모든 사용자에게 SQL Server에 대한 연결을 실행할 수 있어야합니다. 컴퓨터에 관계없이 열립니다. –

+0

그래서 SQL 사용자 이름과 암호 또는 현재 Windows 로그인으로 인증을 시도합니까? –

답변

0

VBA
1) 통합 보안 = SSPI를 통해 SQL Server에 연결하는 방법은 두 가지가 있습니다;
2)는 SSPI를 사용하면 윈도우가 사용됩니다 사용자 (즉, Excel 통합 문서의 로그인 한)의 로그인 자격 증명을 VBA를

을 통해 유효한 사용자 이름 & 비밀번호를 입력합니다.

이제 Windows 자격 증명을 사용하고 싶지 않으므로 지정한 사용자 ID와 암호로 SQL 서버 로그온을 제공해야하며 데이터베이스의 계정과 연결해야합니다. 너는 필요해.

0

이 두 샘플은 저에게 완벽하게 작동합니다.

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