2016-06-29 2 views
0

Я пытаюсь выполнить оператор Bulk Insert с использованием сквозного запроса. У меня есть следующий код:Ошибка 3146: ODBC - Call Failed с сквозной массовой вставкой

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 

Ошибки я получаю: 3146 с описанием ODBC--call failed.

Если я изменяю заявление sSQL к ВСТАВИТЬ ЗАЯВЛЕНИЕ или ЗЕЬЕСТ, запрос выполняется только штрафом.

Почему мой BULK INSERT не работает в PASS через запрос? Я печатаю мою sSQL строку, чтобы убедиться, что это правильно, и это, кажется:

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

На стороне примечания: вы можете написать этот первый фрагмент кода как: 'sSQL =" BULK INSERT tbl_Name & _' строка break 'больше кода здесь'. Или см. Https://msdn.microsoft.com/en- us/library/ba9sxbw4.aspx –

+0

@Tom - Спасибо, я обязательно попробую это. – NLMDEJ

ответ

0

я понял, ответ на этот вопрос. По-видимому, для соединений ODBC существует тайм-аут. Добавив код qdf.ODBCTimeout = 900 '15 Min, объемная вставка была заполнена.

Спасибо за все время в этом!