FIX: 잘못된 열 Excel 에서 에 데이터 ADO 삽입

기술 자료 번역 기술 자료 번역
기술 자료: 314763 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

ADO를 Microsoft Excel 워크시트에 새 데이터 행을 삽입할 때 빈 문자열 값을 포함하는 필드를 데이터가 포함된 경우 ADO Excel에서 잘못된 열을 후속 숫자 필드 데이터 값을 삽입할 수 있습니다.

이 문제는 Microsoft OLE DB 공급자에 대한 Jet 버전 4.0 및 Microsoft Excel에 대한 ODBC 드라이버 발생합니다. 이 문제는 SQL INSERT 문을 또는 AddNew 및 ADO Recordset 개체의 Update 메서드를 사용하는지 여부를 발생합니다.

ADO 새 레코드를 삽입할 때 Excel 통합 문서를 Excel 응용 프로그램이 열려 있으면 이 문제가 발생하지 않습니다.

그러나 Microsoft Excel ADO 작업을 수행하는 동안 열려 있으면 메모리 누수가 발생하기 때문에 이 연습을 방지합니다. 자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
319998BUG: ADO를 사용하여 Excel 워크시트 열 쿼리 시 메모리 누수
이 문제가 발생하는 상황에 대한 자세한 내용은 "추가 정보" 절을 참조하십시오.

해결 방법

이 문제를 해결하려면 Jet 4.0 서비스 팩의 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
239114방법: Microsoft Jet 4.0 데이터베이스 엔진의 최신 서비스 팩을 구하는합니다

현재 상태

Microsoft는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.

추가 정보

문제를 재현하기 위한 단계

  1. Microsoft Excel에서 열고 통합 문서를 새로 만듭니다.
  2. Sheet1에 있는 셀 A1의 왼쪽 위 에서 시작하여 다음 예제 데이터를 입력하십시오.
    표 축소표 확대
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11테스트11테스트
    22테스트22테스트

  3. 통합 문서를 Test.xls 파일로 저장하십시오. Excel 응용 프로그램을 열어 둔 상태로 있지만 새 통합 문서를 닫아야 합니다.
  4. Microsoft Visual Basic에서 표준 EXE 프로젝트를 새로 만듭니다. 기본적으로 Form1이 만들어집니다.
  5. 프로젝트 메뉴에서 참조 를 누릅니다. 사용 가능한 참조 목록에서 선택한 Microsoft ActiveX 데이터 개체 2. x 라이브러리.
  6. Form1 CommandButton 컨트롤에 놓은 다음 단추의 Click 이벤트 프로시저에 다음 코드를 붙여 넣습니다. 참고가 이 코드를 가운데 열에, 열 C의
    Private Sub Command1_Click()
       Dim strCn As String
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
       Dim fld As ADODB.Field
    
       'Open connection
       strCn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & App.Path & "\Test.xls;" & _
          "Extended Properties=Excel 8.0"
       Set cn = New ADODB.Connection
       cn.Open strCn
        
       'Add new values.
       Set rs = New ADODB.Recordset
       With rs
          .CursorLocation = adUseClient
          .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic
          .AddNew
          .Fields("ColumnA").Value = 3
          .Fields("ColumnB").Value = 3
          .Fields("ColumnC").Value = ""
          .Fields("ColumnD").Value = 3
          .Fields("ColumnE").Value = 3
          .Fields("ColumnF").Value = "testing"
          .Update
          .Close
       End With
       Set rs = Nothing
       cn.Close
       Set cn = Nothing
    End Sub
    					
  7. Visual Basic 테스트 프로젝트를 Test.xls 통합 문서로 같은 폴더에 저장하십시오.
  8. 프로젝트를 실행한 및 다음 단추를 클릭하십시오. 처음 있는 Visual Basic IDE (통합 개발 환경 (에), 프로젝트를 실행하면 다음과 같은 오류 메시지가 나타날 수 있습니다.
    런타임 오류 '-2147467259 (80004005)': 선택한 데이터 정렬 시퀀스를 운영 체제에서 지원되지 않습니다.
    이것은 알려진 문제입니다.자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
    246167정렬 순서 오류 개시 ADODB Recordset Excel XLS에 대한 시작 시간
  9. 오류 메시지 대화 상자에서 디버그 를 클릭한 다음 계속 프로젝트를 실행하려면 F5 키를 누릅니다. 업데이트 두 번 실행되기 때문에 이 데이터 하나 대신 두 개의 새로운 행을 삽입합니다 유의하십시오.
  10. 프로젝트 종료 폼을 닫습니다. Excel에서 Test.xls 다시 다음 Sheet1 데이터를 확인하십시오. 다음과 같은 결과가 예상한:

    표 축소표 확대
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11테스트11테스트
    22테스트22테스트
    3333테스트

    그러나 다음 데이터를 참조하십시오.

    표 축소표 확대
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11테스트11테스트
    22테스트22테스트
    3333테스트

    ColumnC에 삽입된 빈 문자열이 무시되었습니다 및 나타나지 않는 것처럼 나타납니다. 따라서 의도한 대상으로 왼쪽에 삽입된 한 열에 모든 후속 숫자 값이 있습니다. 후속 문자열 열이 영향을 받지 않습니다.

변형 1

테스트 데이터를 다음과 같이 구성하십시오.

표 축소표 확대
ColumnAColumnBColumnCColumnDColumnE
1테스트11테스트
2테스트22테스트

다음과 같이 새 값을 추가할 구역을 VBA 프로젝트 수정:
   'Add new values.
   Set rs = New ADODB.Recordset
   With rs
      .CursorLocation = adUseClient
      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic
      .AddNew
      .Fields("ColumnA").Value = 3
      .Fields("ColumnB").Value = ""
      .Fields("ColumnC").Value = 3
      .Fields("ColumnD").Value = 3
      .Fields("ColumnE").Value = "testing"
      .Update
      .Close
   End With
   Set rs = Nothing
   cn.Close
   Set cn = Nothing
				
Test.xls 열었을 때 Sheet1을 다음 데이터를 표시합니다.

표 축소표 확대
ColumnAColumnBColumnCColumnDColumnE
1테스트11테스트
2테스트22테스트
333테스트

알림 빈 문자열 값을 하나의 숫자 열 앞에 때 이 문제가 발생하지 않습니다.

변형 2

테스트 데이터를 다음과 같이 구성하십시오.

표 축소표 확대
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11테스트테스트11테스트
22테스트테스트22테스트

다음과 같이 새 값을 추가할 구역을 VBA 프로젝트 수정:
   'Add new values.
   Set rs = New ADODB.Recordset
   With rs
      .CursorLocation = adUseClient
      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic
      .AddNew
      .Fields("ColumnA").Value = 3
      .Fields("ColumnB").Value = 3
      .Fields("ColumnC").Value = ""
      .Fields("ColumnD").Value = ""
      .Fields("ColumnE").Value = 3
      .Fields("ColumnF").Value = 3
      .Fields("ColumnG").Value = "testing"
      .Update
      .Close
   End With
   Set rs = Nothing
   cn.Close
   Set cn = Nothing
				
Test.xls 열었을 때 Sheet1을 다음 데이터를 표시합니다.

표 축소표 확대
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11테스트테스트11테스트
22테스트테스트22테스트
3333테스트

ADO 두 개의 빈 문자열 값을 삽입하는 경우, ColumnC 및 ColumnD에 삽입된 빈 문자열이 무시되고 사라진 것처럼 나타납니다. 따라서 모든 후속 숫자 값을 의도한 대상으로 왼쪽에 삽입한 두 개의 열이 있습니다. 후속 문자열 열이 영향을 받지 않습니다.

참조

자세한 내용은 Microsoft 기술 자료 문서를 보려면 해당 자료의 문서를 참조하십시오.
294410ACC2002: Null Excel로 내보내면 사용하여 다음 필드로 데이터 교체
257819HOWTO: Visual Basic 또는 VBA를 Excel 데이터로 ADO 사용

속성

기술 자료: 314763 - 마지막 검토: 2005년 9월 26일 월요일 - 수정: 1.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft OLE DB Provider for Jet 4.0
키워드:?
kbmt kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbqfe KB314763 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com