Microsoft Access 查询中的计算字段在具有不同数据的不同计算机上突然失败
Caculated field in Microsoft Access query suddenly fails on different machine with different data
在以下查询中,calcValB
在更改 table 中的数据后突然开始显示所有记录的 #Error
。好像突然认不出来了calcValA
.
SELECT
FilePath1,
cfgVal1 + InStr(Mid(FilePath1, cfgVal1), "\") AS calcValA,
calcValA + InStr(Mid(FilePath1, calcValA), "\") AS calcValB,
...
FROM
Table1,
Config
WHERE ...
cfgVal1
的值为 60; Len(FilePath1)
总是大于 80; FilePath1
在位置 60 后至少包含一个 \
。
我可以使用嵌套查询解决这个问题,但我想知道这是怎么发生的。
我尝试了什么:
- 执行了 VBA 中的公式——它们工作正常
- 从备份中恢复了所有查询 – 错误仍然存在
- 测试了相同的查询在 tables 的旧副本上工作——它工作没有错误
- 将表达式撕成很明显的部分
calcValA
如果被引用会导致#Error
- 尝试修改查询以创建
calcValA = Len(FilePath1)
、calcValB = calcValA + 5
– 这个有效
- 试图将第三个可选参数提供给
Mid()
,设置为 999
– 仍然错误
我目前怀疑问题可能出在具有不同区域设置的计算机上的 Access 运行。我用的是斯洛伐克语,同事用的是 U.S。我已经在 Access 中看到,例如表单部分 Časť1
(第 1 部分)在 U.K 上引发错误。语言环境机器。 (有趣的是,Access 默认将本地化名称放在那里!)但在这种情况下,我确保查询仅为 7 位 ASCII。
示例数据:
Table1.FilePath1
(2 条记录)
a:\a111111\aaaaaa\aaaa\aaaaaaaaaaa\aaaaaa\aaaa aaaaaaa\aa-1\aa\aa1111111\aaaaaaa\aaaaaaa.aaa
a:\a111111\aaaaaa\aaaa\aaaaaaaaaaa\aaaaaa\aaaa aaaaaaa\aa-1\aa\aa1111111\aaaaaaaa\aa1111111.aaaa
Config.cfgVal1
= 61
(table中有一条记录)
问题是,查询和数据在我的机器上工作,它们在同事的机器上不工作。
压缩并修复数据库。
执行数据库工具 > 压缩和修复数据库命令后,查询再次开始正常工作。而不是 #Error
值,适当的数字开始出现在 calcValB
.
中
如果数据库中的源 table 作为链接 table(来自另一个数据库),对实际包含 table 的数据库文件执行相同的操作(不仅对于 table 显示为链接 table) 的数据库文件。
从此类错误中恢复后,最好检查 table.
中是否没有任何记录丢失
在以下查询中,calcValB
在更改 table 中的数据后突然开始显示所有记录的 #Error
。好像突然认不出来了calcValA
.
SELECT
FilePath1,
cfgVal1 + InStr(Mid(FilePath1, cfgVal1), "\") AS calcValA,
calcValA + InStr(Mid(FilePath1, calcValA), "\") AS calcValB,
...
FROM
Table1,
Config
WHERE ...
cfgVal1
的值为 60; Len(FilePath1)
总是大于 80; FilePath1
在位置 60 后至少包含一个 \
。
我可以使用嵌套查询解决这个问题,但我想知道这是怎么发生的。
我尝试了什么:
- 执行了 VBA 中的公式——它们工作正常
- 从备份中恢复了所有查询 – 错误仍然存在
- 测试了相同的查询在 tables 的旧副本上工作——它工作没有错误
- 将表达式撕成很明显的部分
calcValA
如果被引用会导致#Error - 尝试修改查询以创建
calcValA = Len(FilePath1)
、calcValB = calcValA + 5
– 这个有效 - 试图将第三个可选参数提供给
Mid()
,设置为999
– 仍然错误
我目前怀疑问题可能出在具有不同区域设置的计算机上的 Access 运行。我用的是斯洛伐克语,同事用的是 U.S。我已经在 Access 中看到,例如表单部分 Časť1
(第 1 部分)在 U.K 上引发错误。语言环境机器。 (有趣的是,Access 默认将本地化名称放在那里!)但在这种情况下,我确保查询仅为 7 位 ASCII。
示例数据:
Table1.FilePath1
(2 条记录)
a:\a111111\aaaaaa\aaaa\aaaaaaaaaaa\aaaaaa\aaaa aaaaaaa\aa-1\aa\aa1111111\aaaaaaa\aaaaaaa.aaa
a:\a111111\aaaaaa\aaaa\aaaaaaaaaaa\aaaaaa\aaaa aaaaaaa\aa-1\aa\aa1111111\aaaaaaaa\aa1111111.aaaa
Config.cfgVal1
= 61
(table中有一条记录)
问题是,查询和数据在我的机器上工作,它们在同事的机器上不工作。
压缩并修复数据库。
执行数据库工具 > 压缩和修复数据库命令后,查询再次开始正常工作。而不是 #Error
值,适当的数字开始出现在 calcValB
.
如果数据库中的源 table 作为链接 table(来自另一个数据库),对实际包含 table 的数据库文件执行相同的操作(不仅对于 table 显示为链接 table) 的数据库文件。
从此类错误中恢复后,最好检查 table.
中是否没有任何记录丢失