2011-06-16 196 views
2

我有一個查詢要求更新電子郵件服務。大多數時候它都會有數據,但在測試中,我發現它沒有返回任何數據,因爲沒有數據要返回。在沒有數據的情況下,它返回錯誤「變量EDITEDACCTS未定義」。如果沒有數據返回,請檢查查詢結果

我試過在<cftry>包裝查詢,但它本身不「失敗」,因此它不會脫機<cfcatch>。我也試圖定義變量

var EditedAccts = QueryNew("")

以及無非是想

<cfif NOT isDefined(#EditedAccts#)>

,它總是返回 「變量EDITEDACCTS是不確定的」。
我需要一個生產就緒解決方案,我希望在這裏的某個地方可以幫助我。

在此先感謝您的幫助。

+3

請勿在IsDefined()中使用#號。它會導致對'EditedAccts'的評估,這會觸發你試圖阻止的錯誤。這是一個基本的選擇查詢?因爲查詢對象本身應該仍然存在,即使它不包含任何記錄。 – Leigh 2011-06-16 23:32:58

+1

..忘記包含isDefined的正確語法:'' – Leigh 2011-06-16 23:47:28

+0

Thanks @Leigh。刪除#符號工作。我認爲這很簡單,但我無法看到樹木的森林。 – JimP 2011-06-17 14:41:21

回答

3

我剛剛找到答案。您可以在查詢調用中設置「result」參數,然後您可以檢查返回的recordcount字段。

<cfquery name="EditedAccts" datasource="mydatasource" result="queryResult"> 
    ...query goes here... 
</cfquery> 

當使用「結果」參數你就會得到一個結構與使用的SQL,緩存設置,執行時間和記錄計數返回。 現在我可以檢查記錄數並從那裏繼續。

希望這將有助於未來的人。

+2

查詢結果本身具有recordcount屬性。 '#ecitAccts.recordcount#'會給你同樣的結果。正如Leigh在您的原始文章中所說的,零記錄結果集不會導致異常,並且仍然定義。 – charliegriefer 2011-06-16 23:41:16

+0

*編輯*是否有可能你的cfquery包含除'SELECT'語句之外的東西,比如'UPDATE','DELETE',...? – Leigh 2011-06-16 23:41:35

+0

你這個人,就是我所需要的,謝謝! – 2015-10-22 21:13:20

0

我試過使用result =「queryResult」,但是當我試圖引用查詢名稱時,我得到了類似這樣的錯誤 - 「屬性查詢的值,當前爲EditedAccts,無效」。相反,我使用了IsDefined(「#EditedAccts#」) - 包括引號中的值爲我做了訣竅。我只是ColdFusion的新手,但我很快就知道引號中的值與引號中的值完全不同,就函數如何解釋參數而言。

+0

嗯,它確實是在個案的基礎上。理論上,SELECT應該*總是*返回一個查詢對象。除非有什麼干擾......比如查詢包含多個sql語句,所以我們需要查看實際的查詢。順便說一句,不要在isDefined中使用#號。該函數需要一個變量的*名稱*,即一個字符串。正如我在[評論](http://stackoverflow.com/questions/6379730/check-query-results-if-no-data-is-returned#comment7473686_6379730)中提到的那樣,使用#符號表示會導致變量被評估,觸發你試圖防止的錯誤:) – Leigh 2016-04-15 03:50:37

+0

感謝您的澄清。我沒有用#測試,我不確定這是否是正確的語法(這就是爲什麼我說,類似的東西) - 我實際上使用IsDefined(「insertQueryNameHere」)。我認爲查詢非常簡單,沿着'SELECT col1,col2 FROM table1 INNER JOIN table2 on table1_id = table2_id WHERE criteria order by col1'的行,所以不知道爲什麼沒有返回查詢對象。 – B5A7 2016-04-15 05:00:50

+0

是的,我認爲真正的代碼沒有#符號或它會失敗。只是想提及IsDefined的正確語法,因爲使用#符號是一個常見的問題:)從描述中,聲明聽起來沒問題,但它又取決於* exact *查詢,環境,查詢範圍等等。 – Leigh 2016-04-15 12:05:49