2016-06-29 25 views
0

Ich versuche, eine Bulk-Insert-Anweisung mithilfe einer Pass-Through-Abfrage auszuführen. Ich habe den folgenden Code:Fehler 3146: ODBC - Aufruf fehlgeschlagen mit Pass-Through-Masseneinfügung

sSQL = "BULK INSERT tbl_Name " 
sSQL = sSQL & "FROM 'C:\Users\UserName\Desktop\File.txt' " 
sSQL = sSQL & "WITH " 
sSQL = sSQL & "(" 
sSQL = sSQL & "FIELDTERMINATOR = ',', " 
sSQL = sSQL & "ROWTERMINATOR='\n'" 
sSQL = sSQL & ");" 

Set db = CurrentDb 

    Set qdf = db.CreateQueryDef("") 

     qdf.Connect = db.TableDefs("dbo_tbl_Name").Connect 
     qdf.ReturnRecords = False 
     qdf.SQL = sSQL 
     qdf.Execute dbFailOnError 

    Set qdf = Nothing 

Set db = Nothing 

Der Fehler, den ich bekommen ist: 3146 mit einer Beschreibung der ODBC--call failed.

Wenn ich die sSQL Anweisung in einer INSERT-Anweisung oder eine SELECT-Anweisung zu ändern, führt die Abfrage nur in Ordnung.

Warum funktioniert mein BULK INSERT nicht im PASS durch Abfrage? Ich drucke meine sSQL-Zeichenfolge aus, um sicherzustellen, dass es korrekt ist, und es scheint zu sein:

+0

Auf eine Randnotiz: Sie können das erste Stück Code schreiben als: 'sSQL =" BULK INSERT tbl_Name & _' Zeilenumbruch 'mehr Code hier". Oder siehe https://msdn.microsoft.com/en- us/library/ba9sxbw4.aspx –

+0

@Tom - Danke, ich werde das definitiv versuchen. – NLMDEJ

Antwort

0

Ich habe die Antwort auf dieses Problem herausgefunden. Anscheinend gibt es eine Zeitüberschreitung für ODBC-Verbindungen. Durch Hinzufügen des Codes qdf.ODBCTimeout = 900 '15 Min konnte der Masseneinsatz vervollständigt werden.

Danke für die Zeit in diesem!