我的页面会根据您正在查看的页面返回两个查询:
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是一个变量而不是结构。那么我真的必须再次创建一个结构来保存查询,还是有更简单的方法来切换名称?
答案 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框架。运行什么查询以及发送用户的位置是控制器为您处理的事情。