如何在变量中存储查询名称并在以后使用它?

时间:2014-01-14 11:37:08

标签: coldfusion coldfusion-10

我的页面会根据您正在查看的页面返回两个查询:

QueryA和QueryB

我确定您正在查看哪个页面然后我想动态更改我的CF代码以使用正确的查询名称(pesudo-code示例):

<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是一个变量而不是结构。那么我真的必须再次创建一个结构来保存查询,还是有更简单的方法来切换名称?

3 个答案:

答案 0 :(得分:2)

因为你正试图了解正在发生的事情,......,

你有版本1:

<cfset QryName = 'QueryA'>

并将其更改为版本2:

<cfset QryName = QueryA>

版本1实际执行了您所说的操作,将查询名称复制到变量中。版本2创建了指向实际查询对象的指针。换句话说,它“通过引用复制原始查询”。如果你坚持原来的计划,你就可以成功。您将不得不使用关联数组表示法。以下是我发布的一些示例代码,以确保它在我发布此答案之前有效。

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

这与你的版本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>

在某些情况下,此方法更适合手头的任务。看看你的问题,你的问题可能不是其中之一。

答案 1 :(得分:0)

有效。我错误地在代码中引用了引号,例如<cfset QryName = 'QueryA'>,我没有看到。

答案 2 :(得分:0)

如果我正确理解你的问题,听起来你的根本问题是你没有使用MVC框架。运行什么查询以及发送用户的位置是控制器为您处理的事情。