ms-access - MS Access (Office 365) 中的 SQL 查询的奇怪问题
问题描述
我最近继承了一个需要在 MS Access 数据库中运行查询的进程。昨天我偶然发现了以下奇怪的问题,我无法从逻辑上解释:
- 查询未在最新版本的数据库文件中运行(2021 年 8 月数据)
- 错误消息:“未定义的 VAL() 函数”。当我删除 VAL() 时,会出现一条新的错误消息:“未定义的 MID() 函数”;这些消息没有任何意义,因为这两个函数都在 MS SQL 中使用。
- 相同的查询在我从公司服务器下载的早期(2021 年 5 月)版本的数据库中运行良好(备份副本,可通过“早期版本”获得)
- 当我将查询从 May 数据库复制到 Aug 数据库时,我收到“1”(上图)中的错误消息。
- 当我将数据从 Aug 文件复制到 May 文件时,查询运行良好。这让我认为问题不是数据问题。
我不确定在我之前制作报告的人是否对 August 文件做了什么,或者这是否是一个奇怪的计算机故障......
我知道如何解决这个问题(即通过将数据从 August 数据库复制到 May 数据库),但我不知道错误的原因。任何帮助将不胜感激!
SQL 查询代码(将美元转换为加元):
UPDATE T1_DEF_EXPENSETYPE_COST AS F1, SM_FX_MAVG AS F2 SET F1.CDE = F1.COA * IIF( CURRENCY_TYPE = 'CAD',1,
IIF(MID(F1.PERIOD,10,2) = '01',F2.[M12],0) +
IIF(MID(F1.PERIOD,10,2) = '02',F2.[M01],0) +
IIF(MID(F1.PERIOD,10,2) = '03',F2.[M02],0) +
IIF(MID(F1.PERIOD,10,2) = '04',F2.[M03],0) +
IIF(MID(F1.PERIOD,10,2) = '05',F2.[M04],0) +
IIF(MID(F1.PERIOD,10,2) = '06',F2.[M05],0) +
IIF(MID(F1.PERIOD,10,2) = '07',F2.[M06],0) +
IIF(MID(F1.PERIOD,10,2) = '08',F2.[M07],0) +
IIF(MID(F1.PERIOD,10,2) = '09',F2.[M08],0) +
IIF(MID(F1.PERIOD,10,2) = '10',F2.[M09],0) +
IIF(MID(F1.PERIOD,10,2) = '11',F2.[M10],0) +
IIF(MID(F1.PERIOD,10,2) = '12',F2.[M11],0)), F1.FX_PERIOD = MID(F2.PERIOD,4,4) &
IIF(MID(F1.PERIOD,10,2) = '01','-M12','') &
IIF(MID(F1.PERIOD,10,2) = '02','-M01','') &
IIF(MID(F1.PERIOD,10,2) = '03','-M02','') &
IIF(MID(F1.PERIOD,10,2) = '04','-M03','') &
IIF(MID(F1.PERIOD,10,2) = '05','-M04','') &
IIF(MID(F1.PERIOD,10,2) = '06','-M05','') &
IIF(MID(F1.PERIOD,10,2) = '07','-M06','') &
IIF(MID(F1.PERIOD,10,2) = '08','-M07','') &
IIF(MID(F1.PERIOD,10,2) = '09','-M08','') &
IIF(MID(F1.PERIOD,10,2) = '10','-M09','') &
IIF(MID(F1.PERIOD,10,2) = '11','-M10','') &
IIF(MID(F1.PERIOD,10,2) = '12','-M11',''), F1.FX_Rate = IIF( CURRENCY_TYPE = 'CAD',1,
IIF(MID(F1.PERIOD,10,2) = '01',F2.[M12],0) +
IIF(MID(F1.PERIOD,10,2) = '02',F2.[M01],0) +
IIF(MID(F1.PERIOD,10,2) = '03',F2.[M02],0) +
IIF(MID(F1.PERIOD,10,2) = '04',F2.[M03],0) +
IIF(MID(F1.PERIOD,10,2) = '05',F2.[M04],0) +
IIF(MID(F1.PERIOD,10,2) = '06',F2.[M05],0) +
IIF(MID(F1.PERIOD,10,2) = '07',F2.[M06],0) +
IIF(MID(F1.PERIOD,10,2) = '08',F2.[M07],0) +
IIF(MID(F1.PERIOD,10,2) = '09',F2.[M08],0) +
IIF(MID(F1.PERIOD,10,2) = '10',F2.[M09],0) +
IIF(MID(F1.PERIOD,10,2) = '11',F2.[M10],0) +
IIF(MID(F1.PERIOD,10,2) = '12',F2.[M11],0))
WHERE F1.COA IS NOT NULL AND
VAL(MID(F1.PERIOD,4,4)) = VAL(MID(F2.PERIOD,4,4)) + VAL(IIF(MID(F1.PERIOD,10,2) = '01',1,0)) AND
F2.BASE_RATE = 'CAD' AND F2.CURRENCY_CODE = 'USD';