2016-07-08 10 views
0

Ich versuche eine Insert In Abfrage zu verwenden, um Daten aus einer Excel-Datei auszuwählen und in eine Access-Tabelle einzufügen. Das Problem, das ich habe, ist eine der Excel-Spalten können Buchstaben, Zahlen oder beides sein. Ich möchte die Daten als Text auswählen, aber ich schein nur Leerzeichen für die Text- und Text-/Zahleneinträge zu bekommen. Wenn ich die Excel-Datei so sortiere, dass sich ein Textelement in der ersten Zeile befindet, werden alle Daten konvertiert. Ich habe versucht, die folgenden:Microsoft Access Einfügen in Anweisung Auswählen von Daten aus Excel --- Feld ist gemischt Int und Text

strSQL = "INSERT INTO tblImport ([TIMS Company Code]) " & _ 
    "SELECT [TIMS Company Code] " & _ 
    "FROM [Excel 8.0;HDR=YES;DATABASE=" & xlPath & "].[Manual Entry$];" 

==================================== =====================================

strSQL = "INSERT INTO tblImport ([TIMS Company Code]) " & _ 
    "SELECT CStr([TIMS Company Code]) " & _ 
    "FROM [Excel 8.0;HDR=YES;DATABASE=" & xlPath & "].[Manual Entry$] " & _ 
    "WHERE [TIMS Company Code] IS NOT NULL;" 

====== ================================================= =================

strSQL = "INSERT INTO tblImport ([TIMS Company Code]) " & _ 
    "SELECT (CAST([TIMS Company Code]) AS TEXT) " & _ 
    "FROM [Excel 8.0;HDR=YES;DATABASE=" & xlPath & "].[Manual Entry$];" 

ich habe auch in etwas namens „schema.ini“ aussehen, aber es scheint ein wenig über meinen Kopf.

Ich schätze jede Hilfe, die jemand zur Verfügung stellen kann.

Jason

+0

Was passiert, wenn Sie 'IMEX = 1' so hinzufügen? 'HDR = YES; IMEX = 1; DATABASE =' – HansUp

+0

Hallo @HansUp, ich bin gerade auf dieses Problem gestoßen. Leider, weil mehr als die ersten 8 oder 10 Zeilen die Nummer sein können, wird dies nicht funktionieren. Ich habe entdeckt, dass es funktionieren könnte, wenn ich etwas in der Registrierung ändere. https://support.microsoft.com/en-us/kb/194124 – jcarroll

Antwort

2

Wie Sie herausgefunden haben, Access versucht, hilfreich zu sein, und erraten, den Datentyp auf der Grundlage der ersten 8 Zeilen.

Es gibt zwei Lösungen:

  1. eine Dummy-Textzeile am oberen hinzufügen - verwerfen, dass beim Lesen
  2. die Datei als CSV speichern, und verwenden Sie eine Gespeicherte Importspezifikation
1

Nach vieler Forschung Ich habe viel gelernt, aber keine Lösung gefunden. Für alle, die diese Straße stolpert nach unten, hier sind ein paar Dinge, wissenswert:

  • Das Problem tritt auf, weil Access bei den ersten 8 Zeilen sieht und trifft eine Entscheidung auf Typdaten basierend auf diesen
  • Es gibt mehrere Dinge Sie können an die Verbindungszeichenfolge hinzufügen, aber keiner von ihnen helfen, wenn die ersten 8 Zeilen integer sind und es gibt Textwerte später
  • IMEX=1 funktionieren wird, wenn mindestens 1 Zeile des Texts in den ersten 8
  • Sie können ist Passen Sie die Registrierungseinstellungen an, um mehr als die ersten 8 zu sehen, indem Sie hier gehen: [HKLM\Software\Microsoft\Jet\4.0\Engines\Excel
  • Ich war nicht in der Lage, eine Möglichkeit zum Ändern der Registrierungseinstellungen aus VBA zu finden, aber wenn Sie mit C# .Net arbeiten, dann ist es vollständig möglich
  • Die meisten Informationen zu diesem Thema ist in Bezug auf Microsoft SQL Server, ist aber noch hilfreich
  • Hier ist ein Link auf die nützlichsten Website, die ich gefunden: https://yoursandmyideas.wordpress.com/2011/02/05/how-to-read-or-write-excel-file-using-ace-oledb-data-provider/
Verwandte Themen