Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

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

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
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.
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:
    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 = NothingEnd 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:

    ColumnAColumnBColumnCColumnDColumnEColumnF
    11Testen11Testen
    22Testen22Testen
    3333Testen

    Allerdings sehen Sie die folgenden Daten:

    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:

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:

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:

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:

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

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 314763 – Letzte Überarbeitung: 09/26/2005 19:41:15 – Revision: 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 KbMtde
Feedback
d=1&t=">ing" id="language-es-ve">Venezuela - Español
>://c1.microsoft.com/c.gif?DI=4050&did=1&t=">';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> >ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");