访问VBA ODBC连接失败

时间:2016-02-18 11:59:11

标签: sql-server ms-access access-vba

我有一个带有SQL Server后端的Access前端。

在其中一个表格中,有一些VBA可以保留"审核日志"的变化。

在一个过程中有这两位代码,第一个有效,但第二个有错误

工作:

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

因此第一个语句删除表中的所有记录。这很好,因为我已经插入了虚拟数据并逐步执行了代码并看到它被删除了。

但是第二个语句会导致错误:

  

错误-2147467259:ODBC - 与&#39; EventsDB&#39;的连接失败。

任何人都知道为什么第一个声明可以正常工作,但第二个声明失败了?

为第二个语句提取sSQL的值,并通过Access中的SQL查询手动运行它,将数据插入表中。

编辑: 我并不想发表完整的声明,因为它有点像怪物。但这是:

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 & ");"

1 个答案:

答案 0 :(得分:1)

您报告此尝试失败了......

sSQL

...但是这可以使用相同的CurrentDb.Execute sSQL, dbFailOnError + dbSeeChanges 语句...

CurrentProject.Connection.Execute

CurrentDb.Execute是一种ADO方法。 INSERT是一种DAO方法。这两种方法相似,但不一样。

一个重要的区别是当SQL语句包含保留字作为对象(表,字段等)名称时,ADO版本更有可能失败; DAO对问题名称更加宽容。

但是还存在其他差异,并且无法确定哪些是我们未见过的function showDialog() { $mdDialog.show({ controller: 'SampleCtrl', controllerAs: 'vm', bindToController: true, templateUrl: 'template.html', onComplete: function () { service.doSomething(); } }); } 陈述的关键因素。 ; - )