2016-08-30 6 views
0

Мне было интересно, можете ли вы проверить мой код в VBA (Excel) для извлечения данных из базы данных SQL Server и вставить его в лист.VBA SQL Server Выберите

Возврат ошибки в соответствии с прилагаемым изображением.

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

Обычно я получаю эту ошибку, если таблица не существует в выбранной базе данных или если ее нужно назвать по-разному. – Gabor

+0

Он существует! Что вы хотите назвать по-другому? –

+0

Например, некоторые операторы баз данных хотят, чтобы ссылки на таблицы выглядели следующим образом: [LatLong_Amar]. – Gabor

ответ

0

я узнал, что это проблема, кажется, полный путь к таблице, несмотря на то, что база данных определена в строке соединения, должны быть введены. Таким образом, линия "Select * from LatLong_Amar" должна быть изменена на [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

База данных не определена в строке подключения - у вас есть 'Initial Catalgo' вместо' Initial Catalog'. – BeanFrog

+0

Да. Ты прав! –

0

Вы можете сделать это таким образом.

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 

Вот еще один вариант для вас, чтобы обсудить его.

Sub TestMacro() 

' Create a connection object. 
Dim cnPubs As ADODB.Connection 
Set cnPubs = New ADODB.Connection 

' Provide the connection string. 
Dim strConn As String 

'Use the SQL Server OLE DB Provider. 
strConn = "PROVIDER=SQLOLEDB;" 

'Connect to the Pubs database on the local server. 
strConn = strConn & "DATA SOURCE=(local);INITIAL CATALOG=NORTHWIND.MDF;" 

'Use an integrated login. 
strConn = strConn & " INTEGRATED SECURITY=sspi;" 

'Now open the connection. 
cnPubs.Open strConn 

' Create a recordset object. 
Dim rsPubs As ADODB.Recordset 
Set rsPubs = New ADODB.Recordset 

With rsPubs 
    ' Assign the Connection object. 
    .ActiveConnection = cnPubs 
    ' Extract the required records. 
    .Open "SELECT * FROM Categories" 
    ' Copy the records into cell A1 on Sheet1. 
    Sheet1.Range("A1").CopyFromRecordset rsPubs 

    ' Tidy up 
    .Close 
End With 

cnPubs.Close 
Set rsPubs = Nothing 
Set cnPubs = Nothing 

End Sub 
Смежные вопросы