我可以从MS Access运行带有SQL Server查询的CurrentDb.Execute吗?

时间:2017-12-20 13:04:40

标签: vba ms-access

我有2个表,其中一个是从Excel文件导入的,因此我创建了第二个表,以便从导入中收集一些信息,最后生成一个新的Excel表格,以便在另一个地方导入。

我的问题是: 我有一张带有身份证,姓名,账户状态等的表格。 第二个表具有从表a导入的ID,现在我想生成一个注释(一个值来自表a中几列的连接),如下所示:

DATE: 20/12/2017 | FirstName LastName | ID: 123456

对于我已经准备好的表b已经准备好了ID,我目前在MS ACCESS VBA中的代码是:

CurrentDb.Execute "UPDATE a " _
                   & " SET a.Commentary = 'Date: ' + CONVERT(nvarchar,GETDATE(),103) + ' | FirstName LastName | ID: ' + b.ID " _
                   & " FROM tableA a " _
                   & " INNER JOIN tableB b " _
                   & "     ON a.IdNum = b.ID"

我不知道为什么这会给我错误:

  

运行时错误' 3075':查询中的语法错误(缺少运算符)   表达

....(上面的代码)

尝试将代码修改为更多VBA语言,更多MS-Access语言但没有运气。

谢谢你, 迪奥戈

3 个答案:

答案 0 :(得分:1)

您的语法看起来像T-SQL,如果您要使用CurrentDb.Execute,则需要使用Jet / ACE SQL。这意味着:在UPDATE,no CONVERT,no GETDATE()&之后直接指定所有表作为首选连接运算符。

CurrentDb.Execute "UPDATE tableA a INNER JOIN tableB b ON a.IdNum = b.ID" _
                   & " SET a.Commentary = 'Date: ' & Date() & ' | FirstName LastName | ID: ' & b.ID " 

请注意,我假设您正在使用链接表,因为我没有在任何地方看到指定的架构。

答案 1 :(得分:1)

没有。您将需要一个连接字符串以及使用此连接的已保存或创建的传递查询。

然后将此查询的SQL属性设置为SQL字符串并执行查询。

或 - 如果您将表格链接起来 - 按照Erik的建议行事。

答案 2 :(得分:0)

您还可以使用ADODB command将查询直接传递到SQL Server。

您想添加一些错误处理,但是这样的操作将作为起点:

Public Sub ExecuteStatementOnSqlServer(sql As String)

  Dim cmd As ADODB.Command

  Set cmd = New ADODB.Command

  With cmd
     .ActiveConnection = bf_sqlServerConnection
     .CommandType = adCmdText
     .CommandText = sql
     .Execute
  End With

  Set cmd = Nothing

End Sub