1

我有一个带有日期/时间字段的 Access 表。我想从日期/时间字段和其他 3 个文本字段中创建一个复合键字段,格式与另一个数据库中的匹配键字段相同。

所以我连接了 3 个文本字段并在模块中编写了一个用户定义的函数,以将日期字段输出为格式为“YYYYMMDD”的字符串。

Public Function YYYYMMDD(dteDate As Date) As String
    YYYYMMDD = Format(dteDate, "YYYYMMDD")
End Function

然后我可以在 Access 中成功运行我的查询,一切正常。

但是当我在 Excel 中设置一些 DAO 代码并尝试运行在 Access 中运行良好的查询时......

db.Execute "qryMake_tblValsDailyAccount"

...Excel 给了我“表达式中的未定义函数。(错误 3085)”错误。

对我来说,这是 Excel 和/或 Access 中的一个错误,因为 (Excel) 客户端不应该知道任何有关内部计算的信息,这些计算通常在隔离时在 (Access) 服务器中完美进行。

Excel 应将 querydef(不带参数的名称)发送到服务器,让服务器完成其工作,然后接收答案。为什么它需要参与服务器内部的功能?

有谁知道解决这个问题的方法?

4

2 回答 2

4

Access uses Jet, and the combination of Access and Jet understands VBA functions. DAO is a generic data access layer that doesn't understand VBA functions.

When you use DAO, you're not automating Access, merely using that bridge to get to the data.

Even though some versions of Access use DAO internally to communicate with Jet, the ability to understand VBA is programmed into Access, not DAO.

I think your workaround is the best you can do.

于 2010-05-13T21:10:02.017 回答
1

好的,我通过将 VBA 函数替换为通过其主键 ValsDaily_ID 连接到原始数据表的查询来修复它

SELECT tblValsDaily.ValsDaily_ID, 
Format(Year(tblValsDaily.BusinessDate))+
Format(Month(tblValsDaily.BusinessDate),"00")+
Format(Day(tblValsDaily.BusinessDate),"00") AS YYYYMMDD
FROM tblValsDaily;

但这真的很蹩脚,我仍然不知道为什么VBA版本不起作用......

于 2010-05-13T17:04:13.173 回答