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

 황동준 (bogri2000)

추천:  0
파일:     250523_우체국송장출력.accdb (1168KB) 조회:  102
제목:   [RE]Excel을 불러올 때 테이블 전체 데이터를 추가...
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 액세스 버전(2007-2016):

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

저희 홈페이지에서 다운로드 받은 Excel 파일은, 오늘 알려주신 해결방법으로 Access 테이블로 불러오는 오류가 해결되었습니다. 다시 한번 감사드립니다.

그런데 네이버 스마트스토어에서 다운로드 받은 Excel 파일에서 또 다른 오류가 생겼습니다. '테이블에 전체 데이터를 추가할 수 없습니다.' 라는 오류입니다. 

오류를 무시하고 계속 진행했더니 Excel의 레코드가 Access 테이블로 옮겨지기는 합니다. 그런데 왠지 불안해서 문의 드립니다.

혹시나 싶어 Excel 파일과 테이블을 첨부합니다.
==============[이형재님 글에 대한 답변입니다]==============


일단은 저한테는 그런 오류가 발생하지 않는군요. 
0개의 레코드가 손실 되었다는 메세지는 손실 된 게 없다는 뜻이지 않을까요?

제가 짧은지식에 어떤문제가 있는지는 잘 모르겠으나, 일단 엑셀 파일 자체가 좀 이상합니다. 

문제는 문제고, 안되는 부분은 잘 피해서 가면 되지 않겠습니까 ㅎㅎ

중복된 레코드를 제외하여 추가하고, 총 추가된 레코드 개수를 볼 수 있으면 좀 더 안심하실 수 있을 듯 합니다.

아래코드 참조해 보세요.
프라이머리키는 상품주문번호 로 했습니다.

Private Sub cmd4FromHpDownLoad_Click()
Dim db As DAO.Database
    Dim strFilePath As String
    Dim strSQL As String
    Dim rsSource As DAO.Recordset
    Dim rsTarget As DAO.Recordset
    Dim addedCount As Integer
    Dim totalRecords As Integer
    
    Set db = CurrentDb
    
    SysCmd acSysCmdSetStatus, "엑셀파일 가져오는 중..."
    
    ' Step 1: 기존 임시 테이블 삭제 (존재할 경우)
    On Error Resume Next
    db.Execute "DROP TABLE tblNS주문1다운_임시"
    On Error GoTo 0
    
    ' Step 2: 본 테이블의 구조를 복사하여 임시 테이블 생성
    strSQL = "SELECT * INTO tblNS주문1다운_임시 FROM tblNS주문1다운 WHERE 1=0;"
    db.Execute strSQL
    
    ' Step 3: 엑셀 파일을 임시 테이블로 가져오기
    strFilePath = "E:\Q_MyStudy\II_Programing\A_우체국송장 출력\Naver\스마트스토어_order_list_SM업로드용.xlsx"
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "tblNS주문1다운_임시", strFilePath, True, "발주발송관리!A:BO"
    
    ' 가져온 총 레코드 수 확인
    Set rsSource = db.OpenRecordset("SELECT COUNT(*) AS RecordCount FROM tblNS주문1다운_임시;", dbOpenSnapshot)
    totalRecords = rsSource!RecordCount
    rsSource.Close
    Set rsSource = Nothing
    
    addedCount = 0 ' 추가된 레코드 수 초기화
    
    ' Step 4: 임시 테이블에서 중복되지 않는 데이터 가져오기
    Set rsSource = db.OpenRecordset("SELECT * FROM tblNS주문1다운_임시 WHERE 상품주문번호 NOT IN (SELECT 상품주문번호 FROM tblNS주문1다운);", dbOpenDynaset)

    ' Step 5: 본 테이블 열기
    Set rsTarget = db.OpenRecordset("tblNS주문1다운", dbOpenDynaset)

    ' Step 6: 임시 테이블 데이터를 본 테이블로 하나씩 복사
    Do While Not rsSource.EOF
        rsTarget.AddNew
        
        ' 모든 필드 복사
        Dim fld As DAO.Field
        For Each fld In rsSource.Fields
            rsTarget.Fields(fld.Name).Value = fld.Value
        Next fld
        
        rsTarget.Update
        addedCount = addedCount + 1
        rsSource.MoveNext
    Loop

    ' Step 7: 리소스 정리
    If Not rsSource Is Nothing Then rsSource.Close
    If Not rsTarget Is Nothing Then rsTarget.Close
    Set rsSource = Nothing
    Set rsTarget = Nothing
    Set db = Nothing
    
    ' Step 8: 임시테이블 삭제
    DoCmd.Close acTable, "tblNS주문1다운_임시", acSaveNo
    DoCmd.DeleteObject acTable, "tblNS주문1다운_임시"

    ' Step 9: 완료 메시지 출력
    SysCmd acSysCmdClearStatus
    MsgBox "총 " & totalRecords & "개의 레코드 중 " & addedCount & "개의 중복되지 않은 데이터가 추가되었습니다!", vbInformation, "완료"
End Sub
 
[불량 게시물 신고]  
이형재네.
시도해보고 결과 알려드리겠습니다^^
05-23 (15:46)
삭제 ■신고
이형재오류 메시지는 계속 나오지만 계속 진행하는데는 문제가 없네요.

제가 하려고 했던 이상적인 코드를 주셨네요.
많이 배웁니다.
진심으로 감사드립니다~
05-23 (21:23)
삭제 ■신고
        
  

작성일 : 2025-05-23(12:47)
최종수정일 : 2025-05-23(12:49)
 


 ◎ 관련글

  제 목   작성자   날짜
Excel을 불러올 때 테이블 전체 데이터를 추가할 수 없다는 오류 문의 이형재 2025-05-22
[RE]Excel을 불러올 때 테이블 전체 데이터를 추가... 황동준 2025-05-23