|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 액세스 버전(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 |
|