ColdFusion - 变量variableName未定义

时间:2016-01-09 00:45:09

标签: sql-server coldfusion coldfusion-11

在我的cfoutput标记中,我设置了一个变量,用于存储从查询返回的客户的名称。然后我在WHERE标记的cfquery子句中使用该变量来检索客户信息。但是,在提交表单时,我在某些搜索条件下收到错误Variable CUSTOMER is undefined。我认为当CUSTOMER变量为null时会发生错误。我在以下Where子句中尝试了各种选项,例如where Customers.CustomerName = #IIF(isDefined('Form.CUSTOMER'),de(Form.CUSTOMER),de(''))#,但我仍然遇到同样的错误。我在后端使用SQL Server 2012。请注意,我无法在cfparam内使用cfoutput

<cfoutput query="qry_customers">
<cfset  CUSTOMER = #CUSTOMER#>
</cfoutput>
<cfquery name="get_customers" datasource="#request.dsn_name#">
         SELECT * from Customers
         where Customers.CustomerName = '#CUSTOMER#'
</cfquery>

更新错误发生在下面WHERE标记的cfquery子句中。并且它发生only when cfquery标记中的select语句不返回任何记录。 CF错误显示错误的第#行是WHERE子句所在的行。

2 个答案:

答案 0 :(得分:2)

qry_customers没有行时,你会得到那个错误。只需直接引用qry_customer.customer即可。 (如果没有行,这将等同于一个空字符串。您可能最终想要检查qry_customers.RecordCount。)

答案 1 :(得分:2)

我建议尝试一些事情:

  1. 我不认为行private String projectsAsString; ... public final void convertProjectsToString() { String projects = ""; for (Project p : this.getProjects()) { ProjectControl pp = (ProjectControl) p; projects += pp.getName() + ", "; } if (projects != null && projects != "" && projects.length() > 4) { projects = projects.substring(0, projects.length() - 2); } this.projectsAsString = projects; } 是必要的。如果我正确读取它,您只需将变量名称设置为完全相同的名称。此外,它似乎是一个文本字段(基于您的查询将其与名为“CustomerName”的列匹配,而不是像“CustomerNumber”那样)。因此,您至少需要包含引号:<cfset CUSTOMER = #CUSTOMER#>
  2. 我认为您可以更好地调整对变量的调用:<cfset CUSTOMER = "#CUSTOMER#">而非qry_customers.CUSTOMER
  3. 如果您在CUSTOMER标记中传递变量(例如,<cfqueryparam>
  4. ,我怀疑您的问题会自行解决
  5. 如果源中的空值继续造成问题,您可以尝试向字符串添加空格(强制从null转换为字符串),然后修剪该空格(因为您不需要它):<cfqueryparam value="#qry_customers.CUSTOMER#", CFSQLType="CF_SQL_VARCHAR">