2013-08-23 34 views
0

我在想,如果任何人都可以解释为什么我在FM中使用ExecuteSQL函数与通过数据库浏览器查询数据库之间获得相同查询字符串的不同结果(我正在使用DBVisualizer )。FM ExecuteSQL返回与直接数据库查询不同的结果

具体来说,如果我在DBVis运行

SELECT COUNT(DISTINCT IMV_ItemID) FROM IMV 

,我得到2802在的FileMaker,如果我计算表达式

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

然后我得到2898.这使我不信任的ExecuteSQL功能。 FM内部,IMV表是一个ODBC影子,连接到中央MSSQL数据库。在DBVis中,应用程序通过JDBC连接。不过,我认为这不会有什么区别。

任何想法为什么我得到每种方法不同的计数?

回答

2

其实,事实证明,当FM执行SQL,它因素的空白,而DBVisualizer中(不知道其他数据库浏览器应用程序,但我会假设这是相同的)没有。此外,由于TRIM()函数不支持MSSQL(从我所看到的,至少)有必要做出的声明的ExecuteSQL像内的查询:

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

怪异,但有用!

0

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

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

HTH

相关问题