2016-08-30 4 views
0

Ich fragte mich, ob Sie bitte überprüfen Sie meinen Code in VBA (Excel) zum Abrufen von Daten aus einer SQL Server-Datenbank, und fügen Sie es in das Blatt ein.VBA SQL Server Wählen Sie

Es gibt einen Fehler gemäß dem Bild im Anhang zurück.

enter image description here

Sub ConnectionTest() 

Dim conn As ADODB.Connection 
Set conn = New ADODB.Connection 

Dim constr As String 
constr = "Provider=sqloledb;Data source=USO-YEGANEH\SQL2008;Initial Catalgo=USO_Final;User Id=sa;Password=123" 

Dim conRS As ADODB.Recordset 
Set conRS = New ADODB.Recordset 

conn.Open constr 


With conRS 

.ActiveConnection = conn 
.Open "Select * from LatLong_Amar" 
Sheet1.Range("A1").CopyFromRecordset conRS 
.Close 

End With 

End Sub 
+1

Ich bekomme diesen Fehler normalerweise, wenn die Tabelle in der ausgewählten Datenbank nicht existiert oder wenn sie anders benannt werden muss. – Gabor

+0

Es existiert! Was meinst du, anders benannt zu werden? –

+0

Zum Beispiel kommt es vor, dass einige Datenbank-Engines die Tabellenreferenzen wie folgt haben wollen: [LatLong_Amar]. – Gabor

Antwort

0

fand ich heraus, was das Problem ist, es vollständigen Pfad der Tabelle scheint, trotz der Tatsache, dass Datenbank in der Verbindungszeichenfolge definiert ist, eingegeben werden soll. So sollte die Linie "Select * from LatLong_Amar" geändert werden [USO_Final].[dbo].[Latlong_Amar]

Sub ConnectionTest() 

Dim conn As ADODB.Connection 
Set conn = New ADODB.Connection 

Dim constr As String 
constr = "Provider=sqloledb;Data source=USO-YEGANEH\SQL2008;Initial Catalgo=USO_Final;User Id=sa;Password=123" 

Dim conRS As ADODB.Recordset 
Set conRS = New ADODB.Recordset 

conn.Open constr 


With conRS 

.ActiveConnection = conn 
.Open "Select * from [USO_Final].[dbo].[Latlong_Amar]" 
Sheet1.Range("A1").CopyFromRecordset conRS 
.Close 

End With 

End Sub 
+1

Die Datenbank ist nicht in der Verbindungszeichenfolge definiert - Sie haben "Initial Cataloggo" anstelle von "Initial Catalog". – BeanFrog

+0

Ja. Du hast recht! –

0

Sie können es auf diese Weise tun.

Sub ADOExcelSQLServer() 

    Dim Cn As ADODB.Connection 
    Dim Server_Name As String 
    Dim Database_Name As String 
    Dim User_ID As String 
    Dim Password As String 
    Dim SQLStr As String 
    Dim rs As ADODB.Recordset 
    Set rs = New ADODB.Recordset 

    Server_Name = "YOUR_SERVER_NAME" ' Enter your server name here 
    Database_Name = "AdventureWorksLT2012" ' Enter your database name here 
    User_ID = "" ' enter your user ID here 
    Password = "" ' Enter your password here 
    SQLStr = "SELECT * FROM [SalesLT].[Customer]" ' Enter your SQL here 

    Set Cn = New ADODB.Connection 
    Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _ 
    ";Uid=" & User_ID & ";Pwd=" & Password & ";" 

    rs.Open SQLStr, Cn, adOpenStatic 
    ' Dump to spreadsheet 
    With Worksheets("sheet1").Range("a1:z500") ' Enter your sheet name and range here 
     .ClearContents 
     .CopyFromRecordset rs 
    End With 
    '   Tidy up 
    rs.Close 
    Set rs = Nothing 
    Cn.Close 
    Set Cn = Nothing 
End Sub 

Hier ist eine weitere Option für Sie zu überdenken.