DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 194124 - Geändert am: Donnerstag, 24. Juni 2004 - Version: 4.0

 

Auf dieser Seite

Problembeschreibung

Beim Verbinden mit einer Excel-Tabelle mithilfe der DAO-OpenRecordset-Methode möglicherweise einige Werte in einer Excel-Spalte als Null zurückgegeben, wenn der zugrunde liegenden Wert nicht NULL ist. Dies tritt normalerweise auf, wenn numerische und Text-Datentypen werden innerhalb der gleichen Excel-Spalte vermischt.

Ursache

Dieses Problem wird durch eine Einschränkung der Excel-ISAM-Treiber verursacht, sobald es den Datentyp einer Excel-Spalte bestimmt, er zurückgeben wird standardmäßig eine NULL für jeden Wert, der nicht den Datentyp der ISAM-Treiber ist für die Excel-Spalte übernommen hat. Der Excel-ISAM-Treiber bestimmt den Datentyp einer Excel-Spalte anhand der tatsächlichen Werte in die ersten Zeilen und wählt dann einen Datentyp, der die Mehrheit der Werte in die Sampling darstellt.

Lösung

Es gibt zwei Workarounds für dieses Verhalten:
  1. Stellen Sie sicher, dass die Daten in Excel als Text eingegeben werden. Neuformatieren einfach die Excel-Spalte, Text wird nicht dies erreichen. Sie müssen die vorhandenen Werte erneut eingeben, nach dem Neuformatieren der Excel-Spalte. F5 können Sie in Excel vorhandenen Werte in der ausgewählten Zelle erneut ein.
  2. Sie können die Option IMEX hinzufügen = 1; Verbindung mit der Excel-Zeichenfolge in der OpenDatabase-Methode. Zum Beispiel:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    Hinweis: Einstellung IMEX = 1 teilt den Treiber den Import-Modus verwenden. In diesem Zustand, die Registrierungseinstellung ImportMixedTypes = Text wird bemerkt. Dies zwingt gemischte Daten, die in Text konvertiert werden soll. Damit dies zuverlässig funktioniert, müssen Sie möglicherweise auch die Registrierungseinstellung TypeGuessRows modifizieren = 8. Die ISAM-Treiber standardmäßig den ersten acht Zeilen untersucht und von der Sampling bestimmt den Datentyp. Wenn diese acht Zeile Sampling alle numerischen ist, dann IMEX festlegen = 1 wird den standardmäßige Datentyp nicht in Text konvertieren; es bleibt numerische.

    Sie müssen darauf achten, dass IMEX = 1 nicht wahllos verwendet werden. Dies ist die IMPORT-Modus, die Ergebnisse unvorhersehbar, wenn Sie versuchen u. u. anfügt oder von Daten in diesen Modus aktualisiert.

    Die möglichen Einstellungen IMEX sind:
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    der Registrierungsschlüssel, wo sich die oben beschriebenen Einstellungen befinden, ist:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    Finden Sie im REFERENCES Abschnitt dieses Artikels Informationen auf, wenn die Excel-Kalkulationstabelle Text Spaltenüberschriften mit numerischen Daten verfügt.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

Um dieses Problem zu reproduzieren, zuerst erstellen Sie eine Excel-Arbeitsmappe mit einer standardmäßigen Sheet1 Kalkulationstabelle. Geben Sie in der ersten Spalte von Sheet1 die folgenden Werte - 123, aaa, 456 Bbb 789. Speichern Sie dieser Arbeitsmappe im Verzeichnis C:\Temp, und nennen Sie Sie Book1.XLS.

Erstellen Sie in Visual Basic ein neues Standard EXE-Projekt und führen Sie diese Schritte aus:
  1. Stellen Sie einen Verweis auf Microsoft DAO 3.5-Objektbibliothek. In Visual Basic 6.0 werden diese Microsoft DAO 3.51-Objektbibliothek.
  2. Fügen Sie in das neue Formular eine Befehlsschaltfläche hinzu.
  3. Fügen Sie folgenden Code im Deklarationsabschnitt des Formulars:
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    Ausführen des Projekts durch Drücken der Taste F5, und beachten Sie, dass in das Testfenster die Textwerte als Null gedruckt werden. Wenn die Mehrzahl der Werte in der Excel-Tabelle Text wurden, würde das Ergebnis aus der oben stehende Code storniert werden. Würde die numerischen Werte als Null zurückgegeben.

Informationsquellen

Weitere Informationen finden Sie in der folgenden Artikel der Microsoft Knowledge Base:

190195  (http://support.microsoft.com/kb/190195/EN-US/ ) : So wird 's gemacht: Extrahieren von Informationen aus Excel-Tabelle mit DAO

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Keywords: 
kbmt kbprb KB194124 KbMtde
Maschinell übersetzter ArtikelMaschinell ü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: 194124  (http://support.microsoft.com/kb/194124/en-us/ )
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.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store
Folgen Sie uns: