Poprawka: ADO wstawia dane do niewłaściwej kolumny w programie Excel

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 314763
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Symptomy

ADO użycia wstawienie nowych wierszy danych do arkusza programu Microsoft Excel, jeżeli dane zawierają pola zawierające wartości ciągu pustego ADO może wstawić wartości danych kolejnych pól numerycznych do niewłaściwej kolumny w programie Excel.

Ten problem występuje w programie Microsoft OLE DB Provider for Jet w wersji 4.0 i sterownik Microsoft ODBC dla programu Excel. Ten problem występuje, czy używać instrukcji SQL INSERT lub Element AddNew oraz Aktualizacja metod ADO Zestaw rekordów obiekt.

Ten problem występuje, jeśli skoroszyt programu Excel jest otwarty w aplikacji Excel wstawianych nowych rekordów ADO.

Jednak Microsoft zachęca tej praktyki, ponieważ występuje przeciek pamięci, jeśli program Excel jest otwarty podczas operacji ADO.Aby uzyskać dodatkowe informacje kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
319998 Usterka: Przeciek pamięci podczas kwerendy otwierania arkusza programu Excel z ADO
Można znaleźć w sekcji "Więcej informacji" szczegółowe informacje na temat okoliczności, w których występuje ten problem.

Rozwiązanie

Aby rozwiązać ten problem, należy uzyskać najnowszy dodatek service pack dla aparatu Jet 4.0 z dodatkiem Service pack. Aby uzyskać dodatkowe informacje kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
239114 Jak: Uzyskaj najnowszy dodatek Service Pack dla aparatu bazy danych Microsoft Jet 4.0

Stan

Firma Microsoft potwierdziła, że jest to usterka występująca w produktach firmy Microsoft wymienionych na początku tego artykułu.

Więcej informacji

Kroki do odtworzenia problemu

  1. Otwórz program Microsoft Excel, a następnie utwórz nowy skoroszyt.
  2. W arkuszu Arkusz1 wpisz następujące przykładowe dane, począwszy od komórki A1 w lewym górnym rogu:
    Zwiń tę tabelęRozwiń tę tabelę
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testowanie11Testowanie
    22Testowanie22Testowanie

  3. Zapisz skoroszyt jako Test.xls. Aplikacja programu Excel można zostawić otwarte, ale należy zamknąć nowy skoroszyt.
  4. W języku Microsoft Visual Basic, Utwórz nowy projekt Standard EXE. Domyślnie utworzony zostanie formularz Form1.
  5. Na Projekt menu, kliknij przycisk Odwołania. Wybierz z listy dostępne odwołania Microsoft ActiveX Data Objects 2.x Biblioteka.
  6. Miejsce Formant CommandButton Sterowanie na formularzu Form1 i wklej następujący kod w Kliknij przycisk procedurę zdarzenia dla przycisku. Należy zauważyć, że ten kod wstawia pusty ciąg w środkowej kolumnie kolumny 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. Zapisz projekt programu Visual Basic badania w tym samym folderze co skoroszyt, Test.xls.
  8. Uruchom projekt, a następnie kliknij przycisk. Przy pierwszym uruchomieniu projektu w języku Visual Basic zintegrowanym środowiskiem dewelopowania (IDE), może otrzymać następujący komunikat o błędzie:
    Błąd wykonania "-2147467259 (80004005)": Wybrana sekwencja sortowania nie jest obsługiwany przez system operacyjny
    Jest to znany problem.Aby uzyskać dodatkowe informacje kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
    246167 Sortowanie sekwencji Błąd otwarcia ADODB rekordów po raz pierwszy przed Excel XLS
  9. W oknie dialogowym komunikatu o błędzie kliknij przycisk Program Debug, a następnie naciśnij klawisz F5, aby kontynuować działanie projektu. Należy zwrócić uwagę, ponieważ to wstawia dwóch nowych wierszy danych, zamiast jednego Aktualizacja jest wykonywane dwa razy.
  10. Zamknij formularz do zakończenia projektu. Otwórz ponownie Test.xls w programie Excel, a następnie sprawdź dane w arkuszu Arkusz1. Można oczekiwać, że następujące wyniki:

    Zwiń tę tabelęRozwiń tę tabelę
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testowanie11Testowanie
    22Testowanie22Testowanie
    3333Testowanie

    Jednakże zobacz następujące dane:

    Zwiń tę tabelęRozwiń tę tabelę
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testowanie11Testowanie
    22Testowanie22Testowanie
    3333Testowanie

    Jest wyświetlany jako pusty ciąg, który jest wstawiany do ColumnC została zignorowana i zniknął. Dlatego wszelkie kolejne wartości numeryczne są wstawione jedną kolumnę w lewo ich zamierzonego miejsca docelowe. Nie występuje w ciągu kolejnych kolumn.

Zmiana 1

Dane z badań należy skonfigurować następująco:

Zwiń tę tabelęRozwiń tę tabelę
ColumnAColumnBColumnCColumnDColumnE
1Testowanie11Testowanie
2Testowanie22Testowanie

W projekcie języka Visual Basic należy zmodyfikować sekcji, aby dodać nowe wartości w następujący sposób:
   '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
				
Po otwarciu Test.xls w programie Excel Arkusz1 wyświetla następujące dane:

Zwiń tę tabelęRozwiń tę tabelę
ColumnAColumnBColumnCColumnDColumnE
1Testowanie11Testowanie
2Testowanie22Testowanie
333Testowanie

Należy zauważyć, że ten problem występuje podczas pojedynczej kolumny liczbowe poprzedza pusty ciąg znaków.

Zmiana 2

Dane z badań należy skonfigurować następująco:

Zwiń tę tabelęRozwiń tę tabelę
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11TestowanieTestowanie11Testowanie
22TestowanieTestowanie22Testowanie

W projekcie języka Visual Basic należy zmodyfikować sekcji, aby dodać nowe wartości w następujący sposób:
   '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
				
Po otwarciu Test.xls w programie Excel Arkusz1 wyświetla następujące dane:

Zwiń tę tabelęRozwiń tę tabelę
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11TestowanieTestowanie11Testowanie
22TestowanieTestowanie22Testowanie
3333Testowanie

Jeśli ADO wstawi dwie wartości pusty ciąg, wydaje się tak, jakby puste ciągi, które są wstawiane do ColumnC i ColumnD są ignorowane i zniknęły. Dlatego wszelkie kolejne wartości liczbowe są dwie kolumny wstawiony po lewej stronie ich zamierzonego miejsca docelowe. Nie występuje w ciągu kolejnych kolumn.

Materiały referencyjne

Aby uzyskać dodatkowe informacje kliknij numery artykułów poniżej w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:
294410 ACC2002: Wartości null zastąpione następne pole danych podczas eksportowania do programu Excel
257819 UPLOAD: Używanie obiektów ADO z danymi programu Excel z programu Visual Basic lub VBA

Właściwości

Numer ID artykułu: 314763 - Ostatnia weryfikacja: 23 czerwca 2011 - Weryfikacja: 2.0
Słowa kluczowe: 
kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbmt KB314763 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to:314763
Zastrzeżenie dotyczące artykułów z bazy wiedzy o produktach wycofanych
Ten artykuł dotyczy produktów, dla których firma Microsoft nie oferuje już pomocy technicznej. Dlatego jest on oferowany w obecnej wersji i nie będzie już aktualizowany.

Przekaż opinię

 

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