Frage

Ich debuggiere einen Code und muss herausfinden, wo a
DoCmd.TransferSpreadsheet acImport, , ".....
scheitert, also habe ich beschlossen, es "manuell" line-by-line zu importieren, um zu sehen, wohin es fällt.

Ich nehme an, so etwas ist das, wonach ich suche:

mySpreadSheet = ConnectTo(Spreadsheet.xlsx)
while(!mySpreadSheet.EOF)
   get(mySpreadSheet.nextLine)
   SQL("UPDATE MyTable with mySpreadSheet.nextLine")

Ich habe versucht, ohne Erfolg zu googeln. Jede Hilfe wird sehr geschätzt!


Zusätzliche Information:

  • Die Spaltennamen der Tabelle und der Zugriffstabelle sind identisch.
  • Jeder Datentyp ist Nvarchar (max) (oder "Memo", wie Zugriff es nennt)
  • Die Tabelle ist eine verknüpfte Tabelle mit SQL Server 2008
War es hilfreich?

Lösung

Sie können eine ADO -Verbindung zu Ihrer Tabelle erstellen (siehe Verbindungszeichenfolgen für Excel 2007) und öffnen Sie ein Ado -Datensatz mit dieser Verbindung (siehe Stackoverflow: ADODB -Datensatz in VBA sagt, dass Excel -Feld leer ist, wenn es nicht ist zum Beispiel).

Bewegen Sie dann die Datensatzzeilen und erstellen Sie eine SQL -Einfügeanweisung mit den Werten der Zeile.

strInsert = "INSERT INTO MyTable (first_field, second_field) VALUES ('" & -
    rs2.Field(0).Value & "', '" & rs2.Field(1).Value & "');"
Debug.Print strInsert
CurrentDb.Execute strInsert, dbFailonerror

Dieser Code geht davon aus, dass First_field und Second_Field Textetypen sind. Wenn sie numerisch sind, verlieren Sie die einzelnen Zitate.

Ich denke, das tut ungefähr das, was Sie gefragt haben. Bevor ich jedoch auf den Code zurückgreife, prüfe ich, ob die Tabelle sauber in eine neue native Zugangstabelle importiert. (Überprüfen Sie außerdem, ob die Datentypen und Einschränkungen in dieser neuen Tabelle mit denen der verknüpften SQL -Servertabelle kompatibel sind.) Wenn dies funktioniert, versuchen Sie möglicherweise, die Tabelle direkt in SQL Server aus dem Management Studio zu importieren, oder das Tool ist angemessen.

Andere Tipps

ADO funktioniert gut, wenn Sie ein gut definiertes Blattlayout Ihrer Daten haben (HANSUP -Antwort). Wenn Sie vor dem Laden der Objekte eine zusätzliche Steuerung benötigen, können Sie sich in die Excel -Arbeitsmappe einbinden und dann alle von Ihnen gefallenen Daten herausziehen. Es hängt wirklich von dem Kontrollniveau ab, den Sie benötigen.

Public Sub LoadExcelToAccess(xlPath As String)
'uses late binding to open excel workbook and open it line by line

'make reference to Microsoft Excel xx.x Object Model to use native functions, requires early binding however

    Dim xlApp As Object 'Excel.Application
    Dim xlWrk As Object 'Excel.Workbook
    Dim xlSheet As Object 'Excel.Worksheet
    Dim i As Long
    Dim sql As String

    Set xlApp = VBA.CreateObject("Excel.Application")

    'toggle visibility for debugging
    xlApp.Visible = False

    Set xlWrk = xlApp.Workbooks.Open(xlPath)
    Set xlSheet = xlWrk.Sheets("Sheet1") 'modify to your perticular sheet

    'depends on what your trying to do with the sheet
    For i = 1 To 10

        'quick and dirty:  best to load items into custom class collection, then do processing there
        sql = "Insert Into [Temp] (Col1) VALUES (" & xlSheet.Cells(i, 1).Value & ")"
        DoCmd.RunSQL sql
    Next i

    'make sure to dispose of objects
    xlWrk.Close
    xlApp.Quit

    Set xlSheet = Nothing
    Set xlWrk = Nothing
    Set xlApp = Nothing
End Sub

Versuchen Sie zur Fehlerbehebung, um mit der Tabelle zu verlinken und zu sehen, auf welchen Problemen Sie auftreten, einschließlich Daten, die falsch angezeigt werden, wenn Sie es in der Datenblattansicht anzeigen.

Sie können auch versuchen, Ihre Excel -Daten in die Zwischenablage zu kopieren und sie in Ihre Zugriffstabelle einzufügen. Was auch immer fehlschlägt, wird durch Zugriff in eine Tabelle "Fehler" Fehler geschrieben.

Zwei zusätzliche Optionen:

  1. Verknüpfen Sie die Tabelle in Zugriff wie eine Tabelle. Gehen Sie in Access 2007 in "externe Daten" und wählen Sie "Excel -Tabelle importieren". Sie sollten in eine vorhandene Datentabelle, einen neuen Datentatbaren oder einen Link zur Excel -Datei importieren. Dann arbeiten Sie mit dieser neuen "Excel" -Tabelle wie einer Zugriffstabelle (betrachtet die Leistungsprobleme im letzten Fall).

  2. Versuchen Sie, das zu reparieren Docmd.TransferSpreadsheet Problem. Ich verwende diese Methode seit einigen Jahren und es funktioniert gut, obwohl sie in einigen Fällen etwas schwierig sein sollte (ich glaube, es ist Ihr Fall). Bitte ist es wert, wenn Sie weitere Informationen zu Ihrem Problem mit dieser Methode geben, einschließlich Ihrer Zugriffs- und Excel -Version.

Ich hoffe ich habe geholfen. Viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top