FM ExecuteSQL返回与直接数据库查询不同的结果

时间:2013-08-23 18:30:00

标签: sql filemaker

我想知道是否有人可以解释为什么在使用FM中的ExecuteSQL函数与通过数据库浏览器查询数据库(我正在使用DBVisualizer)之间获得相同查询字符串的不同结果。

具体来说,如果我跑

SELECT COUNT(DISTINCT IMV_ItemID) FROM IMV

在DBVis中,我得到2802.在FileMaker中,如果我评估表达式

ExecuteSQL ( "SELECT COUNT(DISTINCT IMV_ItemID) FROM IMV"; ""; "")

然后我得到2898.这让我不信任ExecuteSQL函数。在FM内部,IMV表是一个ODBC影子,连接到中央MSSQL数据库。在DBVis中,应用程序通过JDBC连接。但是,我认为这不应该有任何区别。

为什么我会为每种方法获得不同的计数?

2 个答案:

答案 0 :(得分:2)

实际上,事实证明,当FM执行SQL时,它会影响空白,而DBVisualizer(不确定其他数据库浏览器应用程序,但我认为它是相同的)则不会。此外,由于MSSQL不支持TRIM()函数(至少从我看到过),因此有必要在ExecuteSQL语句中进行查询:

SELECT COUNT(DISTINCT(LTRIM(RTRIM(IMV_ItemID)))) FROM IMV

很奇怪,但它确实有用!

答案 1 :(得分:0)

FM保留影子表记录的缓存(用于内部字段id映射)。我不确定ExecuteSQL()函数是否会导致重新创建缓存。换句话说:也许ESS影子表不同步。尝试通过关闭并重新启动FM客户端或首先执行本机查找来删除缓存。

您还可以尝试通过“打开文件”脚本步骤重新连接到数据库服务器。

HTH