2

我在 MS Access 中编写了一个使用 MonthName 函数的 SQL 查询。在访问中它完美无缺。我将准确的 SQL 语句复制到我经常用于查询数据库的 Excel 模块中。当我运行查询时,excel 一直告诉我 MonthName 是一个未定义的函数名。如果我删除 MonthName 部分,查询运行良好。

好像我缺少参考或其他东西......现在,我正在参考 Microsoft ActiveX 数据对象库 6.0。谁能指出我正确的方向?谢谢

strSQL = "SELECT DISTINCT Customers.CustomerName, Employees.EmployeeName, [Policy data revised].EXDT, MonthName(Month([EXDT])) AS expMonth 
          FROM (([Service Team table] 
          INNER JOIN Customers 
          ON [Service Team table].CustID = Customers.CustID) 
          INNER JOIN Employees 
          ON [Service Team table].EmployeeID = Employees.EmployeeID) 
          INNER JOIN [Policy data revised] 
          ON Customers.CustID = [Policy data revised].CustID 
          WHERE ((([Service Team table].RoleExtension)='2.  Underwriting Assistant') 
          AND (([Policy data revised].EXDT) 
             BETWEEN #" & minExpDt & "# AND #" & maxExpDt & "#)) 
          ORDER BY [Policy data revised].EXDT ASC;"
4

2 回答 2

4

MonthName()函数仅适用于在 Access 应用程序会话中运行的查询。请参阅关于 Microsoft Jet Expression Service 沙盒模式中的“以下 VBA 函数在从属性表调用或在 SQL 语句中使用时将不起作用”项目符号点。在 Access 应用程序会话中,数据库引擎可以使用表达式服务来使用该沙盒函数。

由于您不能使用MonthName,请尝试使用此Format表达式。

Format([EXDT], 'mmmm') AS expMonth
于 2013-05-23T17:11:14.133 回答
1

奇怪,我刚刚在 Excel 2010(64 位)中尝试了以下代码,它对我有用:

Sub foo()
'' Reference: "Microsoft ActiveX Data Objects 6.0 Library"
Dim con As ADODB.Connection, rst As ADODB.Recordset
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Gord\Desktop\Database1.accdb;"
Set rst = New ADODB.Recordset
rst.Open "SELECT MonthName(Month([BookingStart])) FROM Payment_tbl", con, adOpenStatic, adLockOptimistic
Debug.Print rst(0).Value
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub

编辑

根据 HansUp 的评论,Office 2007 和 Office 2010 之间肯定发生了一些变化。我从运行 Office 2010 的 32 位机器上运行了另一项测试,上面的代码针对 Access 2000 .mdb 文件运行,两者都适用于我......

Provider=Microsoft.ACE.OLEDB.12.0;

...和...

Provider=Microsoft.Jet.OLEDB.4.0;

我还检查了SandBoxMode...下的注册表值

HKLM\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines

...它是3,这是“启用”的值(参考:here)。

于 2013-05-23T17:16:57.163 回答