我想知道是否有人可以解释为什么在使用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连接。但是,我认为这不应该有任何区别。
为什么我会为每种方法获得不同的计数?
答案 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