2016-11-30 3 views
0

Ich verwende diese Syntax, um eine gespeicherte SQL Server 2008-Prozedur von Excel 2013 auszuführen. Alles wird so ausgeführt, wie es sollte auf einem PC, aber wenn ich versuche, es auf einem zweiten PC auszuführen, es mit einem FehlerAusführen von SQL-Abfrage von VBA

OLEDB Verbindungsfehler

Sollte nicht, da ich den server~~POS=TRUNC bin hartzucodieren, Benutzername und Passwort der Syntax run w/oa hitch auf jedem PC?

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

Dies wird tatsächlich ausgeführt? Ich sehe nicht, wo Sie die Verbindung dem Befehl zuweisen. Außerdem ist die Angabe von Benutzer-ID und Kennwort mit Integrated Security = SSPI widersprüchlich. Sicherlich ist das nicht die ganze Fehlermeldung. –

+0

@PaulAbbott - Entschuldigung, Fehler beim Kopieren/Einfügen. Ich habe in cmd.ActiveConnection = con .... hinzugefügt. Ich möchte nur in der Lage sein, dass jeder Benutzer, der die Arbeitsmappe öffnet, die Verbindung zu SQL Server ausführen kann. Unabhängig davon, auf welchem ​​Computer es geöffnet ist. –

+0

Also versuchen Sie sich mit einem SQL Benutzernamen und Passwort oder dem aktuellen Windows Login zu authentifizieren? –

Antwort

0

Es gibt zwei Möglichkeiten, um SQL Server über VBA
1) Integrated Security = SSPI zu verbinden;
2)

einen gültigen Benutzernamen & Passwort durch die VBA bereitstellen, wenn Sie SSPI verwenden, die Fenster Anmeldeinformationen des angemeldeten Benutzers (das heißt der Arbeitsmappe Excel) verwendet.

Jetzt, da Sie keine Windows-Anmeldedaten verwenden möchten, müssen Sie eine SQL Server-Anmeldung mit der von Ihnen angegebenen Benutzer-ID und dem Kennwort bereitstellen, die auch einem Konto in der Datenbank mit den entsprechenden Berechtigungen zugeordnet sein muss du brauchst.

0

Diese beiden Beispiele funktionieren perfekt für mich.

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 
Verwandte Themen