ИСПРАВЛЕНИЕ: ADO вставляет данные в неправильном столбцов в Excel

Переводы статьи Переводы статьи
Код статьи: 314763
Развернуть все | Свернуть все

В этой статье

Проблема

При использовании ADO для вставки новой строки данных в электронную таблицу Microsoft Excel, если данные содержат поля, содержащие пустые строковые значения, ADO может вставить значения данных последующие числовых полей в неправильном столбцов в Excel.

Данная проблема возникает в Microsoft OLE DB для Jet версии 4.0 и драйвер ODBC для Microsoft Excel. Данная проблема возникает, нужно ли использовать инструкцию SQL INSERT или Метод AddNew и Обновление методы ADO Набор записей объект.

Эта проблема не возникает, если книга Excel открыта в приложении Excel после ADO вставки новых записей.

Тем не менее Корпорация Майкрософт не рекомендует этого практического занятия потому, что происходит утечка памяти, если Excel открыта во время операции ADO.Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
319998 Ошибка: Утечка памяти при запросе открытии листа Excel с помощью ADO
Обратитесь к разделу «Дополнительная информация» для получения информации об условиях, в которых возникает данная проблема.

Решение

Для решения этой проблемы, получите последний пакет обновления для Jet 4.0 с пакетом обновления. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
239114 Практическое руководство: Получить последний пакет обновления для ядра базы данных Microsoft Jet 4.0

Статус

Корпорация Майкрософт подтверждает, что это является ошибкой в продуктах Майкрософт, перечисленных в начале данной статьи.

Дополнительная информация

Действия для воспроизведения поведения

  1. Откройте Microsoft Excel, а затем создайте новую книгу.
  2. В листе Sheet1 введите указанные ниже данные, начиная с ячейки A1 в верхнем левом углу.
    Свернуть эту таблицуРазвернуть эту таблицу
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Тестирование11Тестирование
    22Тестирование22Тестирование

  3. Сохраните книгу как Test.xls. Приложение Excel можно оставить открытым, но новые книги, необходимо закрыть.
  4. В Visual Basic создайте новый стандартный exe-ФАЙЛ проекта. По умолчанию создается форма Form1.
  5. На Проект меню, нажмите кнопку Ссылки. Выберите из списка Доступные ссылки, Объекты данных ActiveX Microsoft 2.x Библиотека.
  6. Место CommandButton элемент управления на форме Form1, а затем вставьте следующий код в Нажмите кнопку Процедура обработки событий для кнопки. Обратите внимание, что этот код вставляет пустую строку в средний столбец в столбец.
    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. Сохраните в одной папке с книгой, Test.xls тестового проекта Visual Basic.
  8. Запустите проект и нажмите кнопку. При первом запуске проекта в Visual Basic интегрированной среде разработки (IDE), может появиться следующее сообщение об ошибке:
    Ошибка выполнения "-2147467259 (80004005)": Выбранная последовательность сортировки не поддерживается операционной системой
    Это известная проблема.Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
    246167 Открытие ошибки упорядоченной последовательности – записей ADODB первом запуске Excel XLS
  9. В диалоговом окне сообщения об ошибке нажмите кнопку Отладка, а затем нажмите клавишу F5 для запуска проекта. Обратите внимание, это добавляет две новые строки данных, а не один так как Обновление выполняется дважды.
  10. Закройте форму, чтобы завершить проект. Снова откройте Test.xls в Excel и затем просмотреть данные в листе Sheet1. Предполагается, что следующие результаты:

    Свернуть эту таблицуРазвернуть эту таблицу
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Тестирование11Тестирование
    22Тестирование22Тестирование
    3333Тестирование

    Однако можно увидеть следующие данные:

    Свернуть эту таблицуРазвернуть эту таблицу
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Тестирование11Тестирование
    22Тестирование22Тестирование
    3333Тестирование

    Отображается как пустую строку, которая вставляется в ColumnC было проигнорировано и исчез. Таким образом все последующие числовые значения, вставленные один столбец левее предполагаемого назначения. Не влияет на последующие строки столбца.

Вариант 1

Настройки тестовых данных следующим образом:

Свернуть эту таблицуРазвернуть эту таблицу
ColumnAColumnBColumnCColumnDColumnE
1Тестирование11Тестирование
2Тестирование22Тестирование

В проекте Visual Basic Измените раздел для добавления нового значения следующим образом:
   '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 в Excel Sheet1 выводит следующие данные:

Свернуть эту таблицуРазвернуть эту таблицу
ColumnAColumnBColumnCColumnDColumnE
1Тестирование11Тестирование
2Тестирование22Тестирование
333Тестирование

Обратите внимание на то, что эта проблема не наблюдается одного числового столбца предшествует значение пустой строки.

Вариант 2

Настройки тестовых данных следующим образом:

Свернуть эту таблицуРазвернуть эту таблицу
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11ТестированиеТестирование11Тестирование
22ТестированиеТестирование22Тестирование

В проекте Visual Basic Измените раздел для добавления нового значения следующим образом:
   '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 в Excel Sheet1 выводит следующие данные:

Свернуть эту таблицуРазвернуть эту таблицу
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11ТестированиеТестирование11Тестирование
22ТестированиеТестирование22Тестирование
3333Тестирование

Если два значения пустой строки вставляются в ADO, отображается как пустые строки, вставленные в ColumnC и ColumnD игнорируются и исчезли. Поэтому любые последующие числовые значения, вставленные два столбца слева от предполагаемого назначения. Не влияет на последующие строки столбца.

Ссылки

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
294410 ACC2002: Пустые значения заменены следующее поле данных при экспорте в Excel
257819 Использование ADO с данными Excel из Visual Basic или VBA

Свойства

Код статьи: 314763 - Последний отзыв: 7 июня 2011 г. - Revision: 4.0
Ключевые слова: 
kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbmt KB314763 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:314763
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

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