2014-01-14 41 views
0

我的頁面返回根據頁面上的兩個查詢您正在查看:如何將查詢名稱存儲在變量中並在以後使用?

QueryA和QueryB

我確定你正在尋找該頁面的,然後我要動態地改變我的CF代碼,使用正確的查詢名稱這樣的(pesudo代碼示例):

<cfif GetBaseTemplatePath() EQ #ExpandPath('view.cfm')#> 
    <cfset QryName = QueryA> 
    <cfelseif GetBaseTemplatePath() EQ #ExpandPath('edit.cfm')#> 
    <cfset QryName = QueryB> 
    </cfif> 

<cfoutput> #QryName.Forename# #QryName.Surname# etc etc </cfoutput> 

顯然上述不起作用,因爲QryName是一個變量而不是結構。那麼我是否真的必須再次創建一個結構來保存查詢,或者是否有更簡單的方法來切換名稱?

+0

你是什麼意思的「不工作」?什麼是錯誤?因爲根據提供的信息 - 除非我錯過了某些東西 - 應該按照您的要求工作。 –

+0

好吧,它說你試圖使用一個變量作爲結構... –

+0

當你有錯誤,張貼精確錯誤(即:複製並從屏幕粘貼),包括上下文(它將輸出的代碼片段,它確切地標識出什麼是錯誤),以及堆棧跟蹤的前幾行。 –

回答

2

既然你想明白髮生了什麼,...,

您有版本1:

<cfset QryName = 'QueryA'> 

,並把它改成版本2:

<cfset QryName = QueryA> 

第1版實際上做了你所說的你想做的事情,把查詢的名字複製到一個變量中。版本2創建了一個指向實際查詢對象的指針。換句話說,它「通過引用複製原始查詢」。如果你堅持原來的計劃,你可能會成功。你將不得不使用關聯數組符號。下面是我剛剛運行的一些示例代碼,以確保它在我發佈此答案之前有效。

<cfquery name="abc" datasource="dw"> 
table event 
</cfquery> 
<cfset def = "abc"> 

這是eqivalent到版本1.有了這個新的變量,我可以做這樣的事情:

<cfdump var="#variables[def]#" metainfo="no"> 
<cfdump var="#variables[def].recordcount#" metainfo="no"> 

甚至這一點,這是你正嘗試:

<cfoutput>#variables[def]['event_name'][1]#</cfoutput> 

請注意,字母def並未被引用。但是,如果我想使用該變量在CFOUTPUT標籤,我不得不說出來了:

<cfoutput query="#variables['def']#"> 
#event_name#<br /> 
</cfoutput> 

在有些情況下這種方法更適合於手頭的任務。看着你的問題,你的可能不是其中之一。

+0

感謝丹非常豐富我感謝您花時間解釋這一點! –

0

它的工作原理。我錯誤地在我的代碼中引用了引號我沒有看到的<cfset QryName = 'QueryA'>

0

如果我正確理解你的問題,這聽起來像你的根本問題是你沒有使用MVC框架。什麼查詢運行以及向哪裏發送用戶是控制器會爲您處理的事情。

+0

雖然這更適合作爲評論,但海報的代表太低了。通常情況下,我會在這些情況下積極投票,以便此人可以發表評論,但這次我不會,因爲我不同意他所說的話。 –

相關問題