ColdFusion查询输出显示变量名称而不是字段值

时间:2014-02-16 16:36:14

标签: sql coldfusion

我是一只“老狗”,在这种情况下基本上都是自学成才,通常可以使事情发挥作用(原始性和复杂性),但这是我真正受到阻碍的第一件事。

我不想给每个人带来很多东西来试图解释,但是,这里可能是一个更好的解释和例子:

(@ Leigh - 感谢您的时间和帮助!) - 查询是动态的,因为我希望拥有的是一个单独的“通用”页面组合(表单页面和附带的操作页面),用于编辑多个不同(但非常相似)的记录集(这样我就不必编写一大堆单独的表单/操作页面对。)

当调用此“通用”“更改”表单页面时,将传递要编辑的特定记录的“ID”变量,以及包含该记录的特定记录集所特有的“listID”变量编辑。

使用“URL.listID”,表单页面会查看与该值有关的预定义的记录集变量列表(数据源,查询表,第1列的字段,第2列的字段等) “listID”和设置(使用)动态变量。示例 - 如果“listID”为“5”,它只有一列:

<cfif #URL.listID# EQ 5>
  <cfset page_title = 'Change Member Role Picklist'>
  <cfset datasource = '#Session.db_docs#'>
  <cfset query_tbl = 'tblMemberRole'>
  <cfset columns = 1>
  <cfset column1_label = 'Member Role'>
  <cfset column1_field = "role">
  <cfset column1_input_type = "text">
  <cfset column1_input_size = "100">
  <cfset column1_input_maxlength = "100">
</cfif>

查询使用这些变量(“ID”加上从上面列表中获得的其他变量)来检索要编辑的单个记录,并填充“更改”表单。

运行查询:

<cfquery name="cfqGetItem" datasource="#datasource#">
 SELECT * 
 FROM #query_tbl# 
 WHERE ID = <cfqueryparam value="#URL.ID#" cfsqltype="cf_sql_integer">  
</cfquery>

我要填充的“更改”表单(此处没有表格HTML缩写)将是:

<form name="form_item_chg" action="chg_item2.cfm" method="post" enctype="multipart/form-data">

  <input type="text" name="#column1_field#" maxlength="#column1_input_maxlength#" size="#column1_input_size#" value="#cfqGetItem[column1_field][currentRow]#">

  <input type="Submit" value="Post Changes">
</form>

但是,不是使用VALUE为字段“role”填充“更改”表单,而是尝试使用变量名称“column1_field”,它在查询中表示(当然,是真的)未定义

当我尝试“#cfqGetItem [column1_field] [currentRow]#”时,它说“变量currentrow未定义”。

当我尝试“#cfqGetItem.column1_field#”时,它显示“在查询cfqGetItem中未定义元素column1_field”。

我提前道歉,因为不知道/使用所有正确的术语,并希望我能够合理地解释这一点。我怀疑我将不得不重新编写单独的表单页面/操作页面对。感谢大家的时间和帮助!


原始邮寄: 我的技术性不高,这可能很简单,但这里是

我的困境,我试图在查询中使用变量名检索单个记录。

首先,我定义了一些变量:

<cfset ID = #Form.ID#<!--- the single record I want to retrieve, passed from a form --->

<cfset datasource = 'MyDatabase'>
<cfset query_tbl = 'MyDatabaseTable'>
<cfset field1 = 'actual_fieldname1'><!--- field in MyDatabaseTable --->
<cfset field2 = 'actual_fieldname2'><!--- field in MyDatabaseTable --->

ETC。

然后,要检索此单个记录,我使用这些变量运行查询:

<cfquery name="cfqGetItem" datasource="#datasource#">
  SELECT * 
  FROM #query_tbl# 
  WHERE ID = #ID#   
</cfquery>

然后,我尝试显示查询输出:

无论如何

<cfoutput>
  <p>#cfqGetItem.field1#
  <p>#cfqGetItem.field2#
</cfoutput>

OR,AS

<cfoutput>
  <p>#cfqGetItem[field1][currentRow]#
  <p>#cfqGetItem[field2][currentRow]#
</cfoutput>

在每种情况下,我都会收到类似的CF错误消息:“查询cfqGetItem中未定义元素字段1”,或“未定义变量currentrow”。

如何获取查询输出以生成记录的实际值而不是变量名?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果你改变了这个:

<cfoutput>
<p>#cfqGetItem[field1][currentRow]#
<p>#cfqGetItem[field2][currentRow]#
</cfoutput>

到此:

<cfoutput>
<cfloop query="cfqGetItem">
<p>#cfqGetItem[field1][currentRow]#
<p>#cfqGetItem[field2][currentRow]#
</cfloop>
</cfoutput>

你应该没事。但是,这是最简单的方法

<cfoutput query="cfqGetItem">
<p>#actual_fieldname1#
<p>#actual_fieldname1#
</cfoutput>

将表和字段名称设置为变量会使问题复杂化。除非它们确实可以变化,否则不要这样做。此外,cfqueryparam标签是您的朋友。在以下地方使用它:

where id = <cfqueryparam
cfsqltype = "cf_sql_integer"
value = "#id#">

答案 1 :(得分:0)

您也可以尝试这样:

            <cfquery 
                name="GetParks" datasource="cfdocexamples" 
               >
                SELECT PARKNAME, REGION, STATE
                FROM Parks
                ORDER BY ParkName, State
            </cfquery>



            <cfoutput>
              <p>#GetParks.PARKNAME#
              <p>#GetParks.REGION#
            </cfoutput>


            <cfoutput >
              #GetParks['state'][GetParks.RecordCount]#
            </cfoutput>

            <cfoutput >
              #GetParks['state'][2]#
            </cfoutput>