나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 김영준 (kim.young)

추천:  2
파일:     조회:  1547
제목:   표에서 ADODB 쿼리로 복사하는 코드 고칠 부분을 알려주시면 고맙겠습니다..
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007): 구독하고있습니다.

* 아래줄에 질문을 작성하세요 >>

아래의 코드를 실행시키면 6만 몇천행 이하에서는 실행이 되다가 넘어가면 런타임 오류가 납니다.
오류코드는 -2147217865 (80040e37), Microsoft Access 개체를 찾을 수 없다고 나옵니다. 웹에서 여러번 찾아봤지만 수정할 수가 없습니다.
도와주시면 감사하겠습니다. 엑셀 기본이 부족하여 코딩이 서툴다는 생각이 듭니다.

Sub backupSQL()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim lSeq As Long

' Declare variables
strFile = "C:\Users\kimyo\Downloads\koStocks.xlsb"

' construct connection string
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=0"""

' create connection and recordset objects
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

' open connection
cn.Open strCon

' Open backup workbook
Workbooks.Open "C:\Users\kimyo\Downloads\koStocks.backup.xlsb"

' Check the last datetime of backuped.
lSeq = Workbooks("koStocks.backup").Worksheets("koStocks").Cells(Rows.Count, 2).End(3)

' SQL query string
strSQL = "SELECT * FROM " & getListObjectSQLAdress(Sheet1.ListObjects(1)) & " where [datetime] > " & lSeq & ";"

Workbooks("koStocks").Worksheets("koStocks").Activate

' execute SQL query
rs.Open strSQL, cn
***여기에서 오류가 발생합니다.*****




'Append data rows to bckup sheet from copied recordset.
Workbooks("koStocks.backup").Worksheets(1).Cells(Rows.Count, 1).End(3)(2).CopyFromRecordset rs
Workbooks("koStocks.backup").Close

' close connection
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub

Function getListObjectSQLAdress(tbl As ListObject) As String
    getListObjectSQLAdress = "[" & tbl.Parent.Name & "$" & tbl.Range.Address(False, False) & "] AS [" & tbl.Name & "]"
End Function
 
[불량 게시물 신고]  
slgi글세요 도움이 될진 모르겠지만 ACE.OLED DB가 조금 불안정한것 같긴합니다. 
'    objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
'            "Data Source=" & ThisWorkbook.Path & "\" & ActiveWorkbook.name & ";" & _
'            "Extended Properties=""Excel 8.0;HDR=Yes;"";"
'
'
'    objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
'            "Data Source=" & ThisWorkbook.Path & "\" & ActiveWorkbook.name & ";" & _
'            "Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";"

Jet.OLEDB를 한번 사용해 보세요. 32Bit Office에서 동작합니다.
03-12 (09:54)
삭제 ■신고
slgi추가적으로  Jet.OLEDB의 경우 타입이 조금 유연한 반면  ACE.OLEDB의 경우는 타입이 엄격한 편입니다.  에러가 나는 위치의 데이터가 문자가 되어야 하는데 숫자이거나 , 숫자가 되어야 하는데 문자인지 체크도 해보세요03-12 (09:58)
삭제 ■신고
김영준Jet.OLEDB는 적용하지 못했습니다.
우선은 작업workbook파일인 koStocks.xlsb을 열린 그대로 복사하여 backup본을 작성하는 코드로 바꾸었습니다.

답글주셔서 너무 감사합니다.
03-17 (01:22)
삭제 ■신고
        
  

작성일 : 2021-03-04(00:13)
최종수정일 : 2021-03-04(12:13)