Oprava: ADO vloží data do nesprávné sloupce v aplikaci Excel

Překlady článku Překlady článku
ID článku: 314763 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Pokud použijete ADO vložit nové řádky dat do listu aplikace Microsoft Excel zahrnuje data polí obsahujících hodnoty prázdný řetězec, ADO do nesprávného sloupce v aplikaci Excel hodnoty dat následných číselná pole vložit.

K tomuto problému dochází v Microsoft OLE DB Provider for Jet verze 4.0 a ovladač Microsoft ODBC for Excel. K tomuto problému dochází, zda použít příkaz SQL INSERT nebo metodu AddNew a metody Update objektu ADO Recordset.

Tento problém nenastane, pokud ADO vloží nové záznamy je otevřen v aplikaci Excel sešit aplikace Excel.

Microsoft však zabráníte toto cvičení, protože pokud Excel je otevřené během operací ADO dochází k nevracení paměti. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
319998Chyba: Nevracení paměti při dotazu otevření Excel Worksheet s ADO
Naleznete v části "Další informace" Podrobnosti o okolností, ve kterých k tomuto problému dochází.

Řešení

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro aktualizaci Jet 4.0 service pack. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
239114Jak: Získat nejnovější aktualizaci Service Pack pro databázový stroj Microsoft Jet 4.0

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o chybu v produktech společnosti uvedených na začátku tohoto článku.

Další informace

Kroky pro reprodukci chování

  1. Otevřete aplikaci Microsoft Excel a vytvořit nový sešit.
  2. V List1 zadejte následující ukázková data počínaje buňkou A1 v levém horním:
    Zmenšit tuto tabulkuRozšířit tuto tabulku
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11testování11testování
    22testování22testování

  3. Uložte sešit jako Test.xls. Aplikace Excel můžete nechat otevřené, ale musíte zavřít nový sešit.
  4. V aplikaci Microsoft Visual Basic vytvořit nový projekt standardní EXE. Jako výchozí je vytvořen formulář Form1.
  5. V nabídce projekt klepněte na odkazy. Vyberte ze seznamu k dispozici odkazy Microsoft ActiveX Data Objects 2. x knihovna.
  6. Umístěte ovládací prvek CommandButton na Form1 a vložte následující kód v proceduře události klepnutí pro tlačítko. Poznámka: Tento kód vloží prázdný řetězec do prostředním sloupci sloupec 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. Uložit projekt jazyka test ve stejné složce jako sešit, Test.xls.
  8. Spustit projektu a klepněte na tlačítko. Při prvním spuštění projektu v jazyka integrované vývojové prostředí (IDE), může se zobrazit následující chybová zpráva:
    Chyba spuštění '-2147467259 (80004005)': vybraný operační systém nepodporuje pořadí řazení
    Jedná se o známý problém.Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
    246167Kompletování sekvence error opening ADODB Recordset první čas před Excel XLS
  9. V dialogovém okně chybové zprávy klepnutím na odkaz Debug a potom stiskněte klávesu F5 pokračujte spustit projektu. Poznámka: Tato vloží nové řádky dat namísto jednoho protože Update spustit dvakrát.
  10. Zavřete formulář ukončení projektu. Test.xls v aplikaci Excel znovu otevřete a zkontrolujte data v List1. Očekáváte následující výsledky:

    Zmenšit tuto tabulkuRozšířit tuto tabulku
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11testování11testování
    22testování22testování
    3333testování

    Však naleznete následující data:

    Zmenšit tuto tabulkuRozšířit tuto tabulku
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11testování11testování
    22testování22testování
    3333testování

    Zobrazí se jako prázdný řetězec, který je vložen do ColumnC byla ignorována a zmizel. Proto všechny následné číselné hodnoty jsou vložené jeden sloupec vlevo jejich zamýšleného cíle. Sloupec následných řetězec není ovlivněn.

Variační 1

Test dat nakonfigurovat následujícím způsobem:

Zmenšit tuto tabulkuRozšířit tuto tabulku
ColumnAColumnBColumnCColumnDColumnE
1testování11testování
2testování22testování

V projektu jazyka upravit oddíl P?idání nové hodnoty:
   '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
				
otevřete Test.xls v aplikaci Excel zobrazí List1 následující data:

Zmenšit tuto tabulkuRozšířit tuto tabulku
ColumnAColumnBColumnCColumnDColumnE
1testování11testování
2testování22testování
333testování

Všimněte si, že k tomuto problému nedochází při jeden číselný sloupec předchází hodnotu prázdný řetězec.

Variační 2

Test dat nakonfigurovat následujícím způsobem:

Zmenšit tuto tabulkuRozšířit tuto tabulku
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11testovánítestování11testování
22testovánítestování22testování

V projektu jazyka upravit oddíl P?idání nové hodnoty:
   '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
				
otevřete Test.xls v aplikaci Excel zobrazí List1 následující data:

Zmenšit tuto tabulkuRozšířit tuto tabulku
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11testovánítestování11testování
22testovánítestování22testování
3333testování

Pokud ADO vloží dvě hodnoty prázdný řetězec, se zobrazí jako prázdné řetězce vkládané do ColumnC a ColumnD jsou ignorovány a zmizely. Proto všechny následné číselné hodnoty jsou vložené dva sloupce doleva jejich zamýšleného cíle. Sloupec následných řetězec není ovlivněn.

Odkazy

Další informace naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
294410ACC2002: Při exportu do aplikace Excel vyměněna s daty další pole hodnoty Null
257819Postupy: Použití ADO s Excel Data z jazyka nebo VBA

Vlastnosti

ID článku: 314763 - Poslední aktualizace: 26. září 2005 - Revize: 1.2
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbqfe KB314763 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:314763
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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