Update: ADO Fügt Daten in die falschen Spalten in Excel

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 314763 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie ADO, verwenden um neue Zeilen mit Daten in ein Microsoft Excel-Arbeitsblatt einzufügen Wenn die Daten Felder enthalten, die leere Zeichenfolge-Werte enthalten, kann ADO die Daten Werte der nachfolgenden numerische Felder in die falschen Spalten in Excel einfügen.

Dieses Problem tritt in Microsoft OLE DB-Provider für Jet, Version 4.0 und Microsoft ODBC-Treiber für Excel. Dieses Problem tritt auf, ob Sie eine SQL-INSERT-Anweisung oder der AddNew und die Update -Methoden des ADO- Recordset -Objekts verwenden.

Dieses Problem tritt nicht auf, wenn die Excel-Arbeitsmappe in der Excel-Anwendung geöffnet, ist wenn ADO die neuen Datensätze eingefügt.

Microsoft wirkt jedoch gegen diese praktische Übung weil ein Speicherverlust, auftritt wenn Excel während der ADO-Vorgänge geöffnet ist. Weitere Informationen finden Sie die Artikel der Microsoft Knowledge Base:
319998Fehler: Speicherleck beim Abfrage Öffnen von Excel-Arbeitsblatt mit ADO
Finden Sie die Details zu den Bedingungen dieses Problem im Abschnitt "Weitere Informationen".

Lösung

Installieren Sie das neueste Servicepack für Jet 4.0 Service Pack, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
239114So Erhalten Sie das neueste Service Pack für die Microsoft Jet 4.0-Datenbank-Engine

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Öffnen Sie Microsoft Excel und erstellen Sie eine neue Arbeitsmappe.
  2. Geben Sie in Tabelle1 die folgenden Beispieldaten, beginnend mit Zelle A1 in die obere linke Ecke:
    Tabelle minimierenTabelle vergrößern
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testen11Testen
    22Testen22Testen

  3. Speichern Sie die Arbeitsmappe als Test.xls. Sie können die Excel-Anwendung geöffnet lassen, aber Sie müssen die neue Arbeitsmappe schließen.
  4. Erstellen Sie in Microsoft Visual Basic ein neues Standard-EXE-Projekt. Form1 wird standardmäßig erstellt.
  5. Klicken Sie im Menü Projekt auf Verweise . Wählen Sie aus der Liste der verfügbaren Verweise Microsoft ActiveX Data Objects 2. X Library .
  6. Platzieren Sie ein CommandButton -Steuerelement auf Form1, und fügen Sie den folgenden Code in der Click -Ereignisprozedur für die Schaltfläche. Beachten Sie, dass dieser Code eine leere Zeichenfolge in der mittleren Spalte Spalte 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. Speichern Sie das Visual Basic Test-Projekt im selben Ordner wie Ihre Arbeitsmappe Test.xls.
  8. Führen Sie das Projekt, und klicken Sie dann auf die Schaltfläche. Der erstmaligen Ausführung des Projekts in der Visual Basic (IDE), erhalten Sie folgende Fehlermeldung:
    Laufzeitfehler '-2147467259 (80004005)': ausgewählte Sortierreihenfolge vom das Betriebssystem nicht unterstützt
    Dies ist ein bekanntes Problem.Weitere Informationen finden Sie die Artikel der Microsoft Knowledge Base:
    246167Sortierreihenfolge Sequenz Fehler öffnen ADODB Recordset einmal auf ein Excel-XLS
  9. Klicken Sie im Dialogfeld Fehlermeldung klicken Sie auf Debuggen , und drücken Sie die F5-Taste damit das Projekt auszuführen. Beachten Sie, dass diese zwei neue Datenzeilen anstelle einer einfügt, da Update zweimal ausgeführt wird.
  10. Schließen Sie das Formular um das Projekt zu beenden. Öffnen Sie Test.xls in Excel und überprüfen Sie die Daten in Tabelle1. Sie erwarten die folgenden Ergebnisse:

    Tabelle minimierenTabelle vergrößern
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testen11Testen
    22Testen22Testen
    3333Testen

    Allerdings sehen Sie die folgenden Daten:

    Tabelle minimierenTabelle vergrößern
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testen11Testen
    22Testen22Testen
    3333Testen

    Es wird als leere Zeichenfolge, die in ColumnC eingefügt ist ignoriert wurde und verschwunden angezeigt. Daher sind alle nachfolgenden numerische Werte eingefügten eine Spalte links neben die vorgesehenen Ziele. Die nachfolgende Zeichenfolgenspalte ist nicht betroffen.

Variante 1

Konfigurieren Sie die Testdaten wie folgt:

Tabelle minimierenTabelle vergrößern
ColumnAColumnBColumnCColumnDColumnE
1Testen11Testen
2Testen22Testen

Ändern Sie in der Visual Basic-Projekt den Abschnitt neue Werte wie folgt hinzufügen:
   '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
				
Wenn Sie Test.xls in Excel öffnen, zeigt Tabelle1 die folgenden Daten:

Tabelle minimierenTabelle vergrößern
ColumnAColumnBColumnCColumnDColumnE
1Testen11Testen
2Testen22Testen
333Testen

Beachten Sie, dass dieses Problem nicht auftritt, bei eine numerische Spalte die leere Zeichenfolge vorausgeht.

Variante 2

Konfigurieren Sie die Testdaten wie folgt:

Tabelle minimierenTabelle vergrößern
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11TestenTesten11Testen
22TestenTesten22Testen

Ändern Sie in der Visual Basic-Projekt den Abschnitt neue Werte wie folgt hinzufügen:
   '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
				
Wenn Sie Test.xls in Excel öffnen, zeigt Tabelle1 die folgenden Daten:

Tabelle minimierenTabelle vergrößern
ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11TestenTesten11Testen
22TestenTesten22Testen
3333Testen

Wenn ADO zwei leere Zeichenfolge-Werte einfügt, erscheint es als leeren Zeichenfolgen, die in ColumnC und ColumnD eingefügt werden ignoriert, und sind verschwunden. Daher sind alle nachfolgenden numerische Werte eingefügten zwei Spalten links neben der jeweiligen beabsichtigten Ziele. Die nachfolgende Zeichenfolgenspalte ist nicht betroffen.

Informationsquellen

Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
294410ACC2002: Null mit Nächstes Feld Daten ersetzt werden, beim Exportieren nach Excel
257819So wird 's gemacht: Verwenden von ADO mit Excel-Daten von Visual Basic oder VBA

Eigenschaften

Artikel-ID: 314763 - Geändert am: Montag, 26. September 2005 - Version: 1.2
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbqfe KB314763 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 314763
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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