2013-08-23 36 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

相關問題