0

我想知道是否有人可以解释为什么我在使用 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 连接。但是,我认为这不应该有任何区别。

任何想法为什么我对每种方法都有不同的计数?

4

2 回答 2

2

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

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

奇怪,但它有效!

于 2013-08-26T15:32:43.743 回答
0

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

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

高温高压

于 2013-08-23T20:28:19.510 回答