2016-02-18 12 views
1

У меня есть интерфейс доступа с бэкэнд SQL Server.Не удалось подключиться к подключению ODBC VBA

В одной из форм имеется бит VBA для хранения «журнала аудита» изменений.

В одной процедуре есть эти 2 бита кода, первые работы, но вторая дает ошибку

работы:

sSQL = "DELETE FROM [dbo_EventReport_Audit_Temp_Before];" 
CurrentProject.Connection.Execute sSQL 

Не работают несколько строк вниз:

sSQL = "INSERT INTO [dbo_EventReport_Audit_Temp_Before] (<TABLE COLUMNS>) SELECT <TABLE COLUMNS> FROM [dbo_EventReport] WHERE ((Event_ID)= <EVENT_ID>");" 
CurrentProject.Connection.Execute sSQL 

Таким образом, первый оператор удаляет любые записи в таблице. Это прекрасно работает, поскольку я вставил фиктивные данные и прошел через код и увидел, что он будет удален.

Но второе утверждение вызывает ошибку:

Error -2147467259: ODBC--connection to 'EventsDB' failed.

кто-то любая идея, почему первое утверждение работает нормально, но второй не удастся?

Извлечение значения sSQL для второго оператора и его запуск вручную через SQL Query in Access вставляет данные в таблицу.

EDIT: Я не хотел публиковать полный отчет, так как он немного монстр. Но вот это:

sSQL = "INSERT INTO " & sAudTmpTable & " ([audType], [audDate], [audUser], [Event_Number], [Event_ID], " & _ 
      "[Received_Date], [Response_Date], [Site], [Server], [Workstation], [Software_Version], [Data_Version], " & _ 
      "[Description], [Test_Description], [Company], [Observed_By], [Observed_Date], [Tested_By], [AssignedTo], " & _ 
      "[Tested_Date], [Test_Result], [Ind_Tested_By], [Ind_Tested_On], [Ind_Test_Result], [Reviewed_By], " & _ 
      "[Actioned_Date], [Review_Date], [Review_Result], [Completed_By], [Completed_Date], [Closed_By], " & _ 
      "[Closed_Date], [Exclude], [Category], [State], [Event_Responsibility], [Probability], [WIP_Number], " & _ 
      "[OriginalWIP], [Severity], [Blocked], [Block_Description], [Tags], [Work], [TaskID], [EventType], " & _ 
      "[DefectType], [known_issue_impact], [known_issue_description], [Operator_Notes], [BugWIP], " & _ 
      "[SupplierName], [SupplierCompany], [Simulator], [ATSTest], [FixPriority]) " & _ 
      "SELECT '" & EditOrInsert & "' AS Expr1, '" & DateTime & "', '" & User & "', [Event_Number], [Event_ID], " & _ 
      "[Received_Date], [Response_Date], [Site], [Server], [Workstation], [Software_Version], [Data_Version], " & _ 
      "[Description], [Test_Description], [Company], [Observed_By], [Observed_Date], [Tested_By], [AssignedTo], " & _ 
      "[Tested_Date], [Test_Result], [Ind_Tested_By], [Ind_Tested_On], [Ind_Test_Result], [Reviewed_By], " & _ 
      "[Actioned_Date], [Review_Date], [Review_Result], [Completed_By], [Completed_Date], [Closed_By], " & _ 
      "[Closed_Date], [Exclude], [Category], [State], [Event_Responsibility], [Probability], [WIP_Number], " & _ 
      "[OriginalWIP], [Severity], [Blocked], [Block_Description], [Tags], [Work], [TaskID], [EventType], " & _ 
      "[DefectType], [known_issue_impact], [known_issue_description], [Operator_Notes], [BugWIP], " & _ 
      "[SupplierName], [SupplierCompany], [Simulator], [ATSTest], [FixPriority] " & _ 
      "FROM [" & sTable & "] WHERE ((" & sKeyField & ")=" & lngKeyValue & ");" 
+0

Доступ ли предоставит вам дополнительную информацию о сбое при выполнении 'INSERT', как это? -> 'CurrentDb.Execute sSQL, dbFailOnError + dbSeeChanges' – HansUp

+0

Раздражающе, вот как я вчера запускал этот код, пока не прочитал что-то, что сказал вместо этого использовать' CurrentProject.Connection.Execute sSQL'. Использование 'db.Execute sSQL, dbFailOnError + dbSeeChanges' работает отлично. Я до сих пор не понимаю, почему первое утверждение работает нормально, но не второе, используя 'CurrentProject.Connection.Execute sSQL', неважно. – TomBridges

ответ

1

Вы сообщили об этом попытка не удалась ...

CurrentProject.Connection.Execute sSQL 

... но это работает, используя один и тот же sSQL заявление ...

CurrentDb.Execute sSQL, dbFailOnError + dbSeeChanges 

CurrentProject.Connection.Execute - метод ADO. CurrentDb.Execute - метод DAO. Эти два метода похожи, но не одинаковы.

Важным отличием является то, что версия ADO с большей вероятностью потерпит неудачу, если оператор SQL включает зарезервированные слова в качестве имен объектов (таблицы, поля и т. Д.); DAO более прощает имена проблем.

Но есть и другие отличия, и невозможно определить, какой из них является ключевым фактором для заявления INSERT, которого мы не видели. ;-)

+0

Добавил оператор VBA SQL в редактирование исходного сообщения. – TomBridges

Смежные вопросы