[SQL] 엑셀 VBA에서 액세스 SQL 데이터베이스
SQL엑셀 VBA에서 액세스 SQL 데이터베이스
나는 MSDN에서 해당 프로그램을 VBA의 코드를 복사하고 저 방법 엑셀 시트로 SQL 쿼리에서 잡아 결과 (2007 엑셀)에 :
Sub GetDataFromADO()
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = "select * from myTable"
objMyCmd.CommandType = adCmdText
objMyCmd.Execute
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open objMyCmd
'Copy Data to Excel'
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
End Sub
이미 Microsoft ActiveX 데이터 참조로 2.1 라이브러리에서 개체 추가했습니다. 그리고이 데이터베이스에 액세스 할 수 있습니다.
나는이 서브 루틴을 실행할 때 지금, 그것은 오류가 있습니다 :
런타임 오류 3704 : 개체를 닫을 때 작업이 허용되지 않습니다.
문에서 :
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
어떤 생각을 왜?
감사.
해결법
-
==============================
1.나는 당신의 연결 문자열에 초기 카탈로그를 추가했습니다. 또한 단순히 내 자신의 SQL 문을 만드는 찬성의 ADODB.Command 구문을 포기하고 그 변수에 레코드 집합을 열했습니다.
나는 당신의 연결 문자열에 초기 카탈로그를 추가했습니다. 또한 단순히 내 자신의 SQL 문을 만드는 찬성의 ADODB.Command 구문을 포기하고 그 변수에 레코드 집합을 열했습니다.
도움이 되었기를 바랍니다.
Sub GetDataFromADO() 'Declare variables' Set objMyConn = New ADODB.Connection Set objMyRecordset = New ADODB.Recordset Dim strSQL As String 'Open Connection' objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;" objMyConn.Open 'Set and Excecute SQL Command' strSQL = "select * from myTable" 'Open Recordset' Set objMyRecordset.ActiveConnection = objMyConn objMyRecordset.Open strSQL 'Copy Data to Excel' ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset) End Sub
-
==============================
2.제안 된 변경 :
제안 된 변경 :
수정 된 코드 :
Sub GetDataFromADO() 'Declare variables' Dim objMyConn As ADODB.Connection Dim objMyCmd As ADODB.Command Dim objMyRecordset As ADODB.Recordset Set objMyConn = New ADODB.Connection Set objMyCmd = New ADODB.Command Set objMyRecordset = New ADODB.Recordset 'Open Connection' objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;" objMyConn.Open 'Set and Excecute SQL Command' Set objMyCmd.ActiveConnection = objMyConn objMyCmd.CommandText = "select * from mytable" objMyCmd.CommandType = adCmdText 'Open Recordset' Set objMyRecordset.Source = objMyCmd objMyRecordset.Open 'Copy Data to Excel' ActiveSheet.Range("A1").CopyFromRecordset objMyRecordset End Sub
-
==============================
3.나는 소프트웨어 관련 비트 없음으로 컴퓨터에 앉아있어,하지만 메모리에서 코드가 잘못 보이는 것이다. 당신은 명령을 실행하지만 레코드 집합이 objMyCommand.Execute 반환을 폐기하고 있습니다.
나는 소프트웨어 관련 비트 없음으로 컴퓨터에 앉아있어,하지만 메모리에서 코드가 잘못 보이는 것이다. 당신은 명령을 실행하지만 레코드 집합이 objMyCommand.Execute 반환을 폐기하고 있습니다.
내가 할 줄 :
Set objMyRecordset = objMyCommand.Execute
... 다음 "공개 레코드"부분을 잃게됩니다.
-
==============================
4.즉, 적절한 연결 문자열인가? 어디 SQL Server 인스턴스는 어디에 있습니까?
즉, 적절한 연결 문자열인가? 어디 SQL Server 인스턴스는 어디에 있습니까?
당신은 당신이 위의 지정된 연결 문자열을 사용하여 SQL 서버에 연결할 수 있는지 확인해야합니다.
편집 :가 열려 있으면 레코드의 State 속성을 봐보고? 또한, 레코드를 열기 전에 adUseClient를 CursorLocation 속성을 변경합니다.
-
==============================
5.(당신은 SQL Server에서 인 경우)에 저장된 프로 시저의 시작 부분에 설정 NOCOUNT를 추가합니다. 난 그냥 내 자신의 일에이 문제를 해결 그것은 레코드 내가 사용하려고했던에로드되는, 예 : "영향을받는 1203 행"로, 중간 결과에 의해 발생했다.
(당신은 SQL Server에서 인 경우)에 저장된 프로 시저의 시작 부분에 설정 NOCOUNT를 추가합니다. 난 그냥 내 자신의 일에이 문제를 해결 그것은 레코드 내가 사용하려고했던에로드되는, 예 : "영향을받는 1203 행"로, 중간 결과에 의해 발생했다.
-
==============================
6.@firedrawndagger : 목록 필드 이름에 / 열 머리글은 레코드 필드 컬렉션을 반복하고 이름을 삽입합니다 :
@firedrawndagger : 목록 필드 이름에 / 열 머리글은 레코드 필드 컬렉션을 반복하고 이름을 삽입합니다 :
Dim myRS as ADODB.Recordset Dim fld as Field Dim strFieldName as String For Each fld in myRS.Fields Activesheet.Selection = fld.Name [Some code that moves to next column] Next
from https://stackoverflow.com/questions/1120674/accessing-sql-database-in-excel-vba by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 서브 쿼리가 존재합니다 도입되지 않은 경우 하나 개의 표현이 선택 목록에 지정할 수 있습니다 (0) | 2020.04.04 |
---|---|
[SQL] 다른 테이블을 기반으로 테이블의 모든 행을 삭제 (0) | 2020.04.04 |
[SQL] MySQL은 - 어떻게 "0"전면 패드의 우편 번호에? (0) | 2020.04.03 |
[SQL] 어떻게 MySQL의 테이블에 사용자 정의 CHECK 제약 조건을 추가하는 방법은 무엇입니까? (0) | 2020.04.03 |
[SQL] FULL OUTER SQLite는 함께 가입 (0) | 2020.04.03 |