2016-08-30 2 views
0

VBA (Excel)에서 내 코드를 검사하여 SQL Server 데이터베이스에서 데이터를 검색하고 시트에 삽입 할 수 있는지 궁금합니다.VBA SQL Server Select

첨부 된 그림에 따라 오류가 반환됩니다.

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

데이터베이스가 연결 문자열에 정의되어 있지 않습니다. '초기 카탈로그'대신 '초기 카탈로니아'가 있습니다. – 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